Почему использование пакетов в MVC приводит к увеличению использования памяти

Мы обновили различные сайты до версии MCV4, и одновременно мы использовали возможность создания Bundle с dll System.Web.Optimization. Все работает.

Однако у нас есть следующая проблема: когда javascript называется пакетом приложения выделяет около 50 МБ ОЗУ, не отпуская его. Javascript, включенный в комплект, составляет в общей сложности около 2 Мб.

Примечание: Мы создаем Bundles в глобальном asax, событие "Application_Start"

   protected virtual void Application_Start()
        {

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterBundles(BundleTable.Bundles);
        RegisterRoutes(RouteTable.Routes);
    }



 protected virtual void RegisterBundles(BundleCollection bundles)
        {
        bundles.Add(new StyleBundle("~/content/all.css").Include(
                    "~/content/site.css"
                    ));

        bundles.Add(new StyleBundle("~/content/themes/base/base.all.css").Include(
                    "~/Content/themes/base/jquery-ui-1.8.23.custom.css",
                    "~/content/themes/base/kendo.common.css",
                    "~/content/themes/base/kendo.totalcom.css",
                    "~/Content/themes/base/jquery.contextmenu.css",
                    "~/content/themes/base/tipsy.css",
                    "~/content/themes/base/jquery.ibutton.css"
                    ));

        bundles.Add(new ScriptBundle("~/Scripts/all.js").Include(
                "~/Scripts/jquery-1.8.2.js",
                "~/Scripts/modernizr-1.7.js",
                "~/Scripts/jquery-ui-1.8.22.custom.js",
                "~/Scripts/jquery.validate.js",
                "~/Scripts/jquery.validate.unobtrusive.js",
                "~/Scripts/jquery.unobtrusive-ajax.js",
                "~/Scripts/conditional-validation.js",
                "~/Scripts/fileuploader.js",
                "~/Content/tiny_mce/jquery.tinymce.js",
                "~/Scripts/kendo.all.js",
                "~/Scripts/kendo.aspnetmvc.js",
                "~/Scripts/jquery.contextmenu.js",
                "~/Scripts/jquery.tipsy.js",
                "~/Scripts/jquery.checkradio.js",
                "~/Scripts/jquery.metadata.js",
                "~/Scripts/jquery.ibutton.js",
                "~/Scripts/jquery.easing.js",
                "~/Scripts/functions.js",
                "~/Scripts/Erp.js",
                "~/Scripts/Cms.js"
            ));
    }

Связки вызывается на главной странице

<%: Styles.Render("~/Content/all.css") %>
<%: Styles.Render("~/content/themes/base/base.all.css") %>
<%: Scripts.Render("~/Scripts/all.js") %>

EDIT: когда выполняется следующая строка, используется дополнительная память 50 МБ.

<%:
Scripts.Render("~/Scripts/all.js")
 %>

Кто-нибудь еще столкнулся с этой проблемой? Любые предложения по сокращению потребления памяти?

Ответы

Ответ 1

Мне недавно приходилось иметь дело с Bundles, добавляя 200 Мбайт + памяти к моему процессу IIS, когда вы показываете kendo.all.js (это ошеломляющий 5 МБ, миниатюрная версия - около 2 МБ), что смешно. Я планирую разбить этот файл кендо на несколько пакетов и исключить элементы управления, которых я не хочу, но я хотел бы обсудить это позже.

В моем случае у меня есть как неминифицированные, так и уменьшенные версии активов у поставщика. Мне не нужны Связки, чтобы минимизировать что-либо. Все, что мне нужно, это исправить прямые ссылки на неустановленные сценарии, когда debug="true" и испустить ссылку на пакет конкатенированных, но преминированных скриптов, когда debug="false".

В моем BundleConfig.cs я использовал ScriptBundle для моих файлов-продавцов, которые будут пытаться минимизировать, в результате чего взводилную шляпу я уже упоминал. Использование простого старого Bundle дает мне необходимую мне функциональность, не пытаясь минимизировать и экономить мне много памяти. Sod off, ScriptBundle!

Ответ 2

Можете ли вы включить оптимизацию

public static void RegisterBundles(BundleCollection bundles)
{
    // your bundling goes here

    BundleTable.EnableOptimizations = true;
}