【问题标题】:Why does using bundles in MVC cause increased memory usage为什么在 MVC 中使用 bundle 会导致内存使用量增加
【发布时间】:2015-01-08 16:23:41
【问题描述】:

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

但是,我们有以下问题: 当调用 javascript 时,应用程序的捆绑包分配大约 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"
            ));
    }

在母版页中调用包

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

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

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

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

【问题讨论】:

  • @Mediator 你有没有找到解决方案?
  • 您的应用程序是如何部署的?它是在单个服务器上,还是在使用像 azure 这样使用分布式缓存的服务?另外,您使用的是哪个版本的 MVC 网络优化?
  • @Jack 版本 1.1 - 单服务器,没有天蓝色。在生产中,我们使用网络花园,但我在只有 1 个 w3wp.exe 进程的本地系统上看到了这个问题
  • @DaveA 问题在发布模式和调试模式中普遍存在 - 使用 System.Web.Optimization 1.1 版。

标签: asp.net-mvc bundle


【解决方案1】:

我最近不得不处理在为kendo.all.js 提供服务时向我的 IIS 进程添加 200MB 以上内存的 Bundle(这是一个惊人的 5MB;缩小版约为 2MB),这太荒谬了。我打算把那个剑道文件分成几个包,去掉我不想要的控件,但我想稍后再处理。

就我而言,我有来自供应商的资产的未缩小版本和缩小版本。 I don't need Bundles to minify anything。我需要它做的就是在debug="true" 时发出指向未缩小脚本的直接链接,并在debug="false" 时发出指向串联但预缩脚本包的链接。

在我的 BundleConfig.cs 中,我一直在为我的供应商文件使用 ScriptBundle,它会尝试缩小,从而导致我已经提到过三角帽。仅使用普通的旧 Bundle 即可为我提供所需的功能,而无需尝试缩小,并为我节省了大量内存。滚开,ScriptBundle

【讨论】:

  • 你是如何知道包的内存使用情况的?我遇到了类似的问题,我认为捆绑可能是罪魁祸首,但我想确定一下。
  • @Escobar5 当时,我主要更改客户端脚本,这是唯一的服务器端更改。我注意到捆绑包的输出被严重破坏,所以我恢复了更改并且内存问题消失了。我只研究了 ScriptBundle 与 Bundle,足以注意到我不需要的额外缩小,所以我只用 Bundle 进行了尝试,并且足够好。
  • 谢谢,会试试的。
  • 你是我的英雄!
  • 我的包中的 kendoui.all 也有同样的东西,但我的包中还包含其他几个大型库。它导致额外的 450MB(!) 内存使用 - 就在调用 Scrips.Render 时(通过查看诊断工具发现)有些似乎被 GC 清理了,有些则没有。 EnableOptimizations 打开或关闭并不重要。我最终只是将旧的脚本标签放回并删除了包。 Web.Optimizations 自 2014 年以来就没有改变,我认为我们是恐龙。 .Net Core 的做法不同,许多/大多数 ppl 似乎正在设计/构建阶段 w 进行捆绑。任务运行者
【解决方案2】:

能否请您启用优化

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

    BundleTable.EnableOptimizations = true;
}

【讨论】:

    猜你喜欢
    • 2013-02-14
    • 2014-07-11
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    相关资源
    最近更新 更多