为什么在MVC中使用bundle会导致内存使用量增加

Luc*_*ass 14 asp.net-mvc bundle

我们已经将各种站点更新为MCV4版本,同时我们利用了使用dll System.Web.Optimization创建Bundle的能力.一切正常.

但是,我们遇到以下问题:当调用javascript时,应用程序的bundle会分配大约50 MB的RAM,而不会释放它.包中包含的javascript总共约为2 Mb.

注意:我们在全局asax中创建Bundles,事件"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"
            ));
    }
Run Code Online (Sandbox Code Playgroud)

捆绑包在主页面中调用

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

编辑:当执行以下行时,使用额外的50mb内存

<%:
Scripts.Render("~/Scripts/all.js")
 %>
Run Code Online (Sandbox Code Playgroud)

还有其他人遇到过这个问题吗?有没有减少这种内存消耗的建议?

Hac*_*ese 5

我最近不得不处理Bundles在服务时为我的IIS进程添加200MB +的内存kendo.all.js(这是一个惊人的5MB;缩小版本大约是2MB),这是荒谬的.我打算将这个kendo文件分成几个包并取消我不想要的控件,但我想稍后处理.

在我的情况下,我有来自供应商的资产的未明确和缩小版本.我不需要Bundles来缩小任何东西.我需要它做的就是发出直接链接到未编写的脚本,debug="true"并在发出链接到连接但预先编写的脚本时debug="false".

在我的BundleConfig.cs中,我一直在使用ScriptBundle我的供应商文件,它会尝试缩小,导致我已经提到的翘起的帽子.使用普通的旧版本Bundle为我提供了我需要的功能,而不是试图缩小,并节省了大量的内存.滚开,ScriptBundle!


Pra*_*iya 0

您可以启用优化吗

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

    BundleTable.EnableOptimizations = true;
}
Run Code Online (Sandbox Code Playgroud)