我们已经将各种站点更新为版本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")
%>
还有其他人遇到过这个问题吗?有没有减少这种内存消耗的建议?
答案 0 :(得分:5)
我最近不得不处理Bundles在服务kendo.all.js
时为我的IIS进程添加200MB +的内存(这是一个惊人的5MB;缩小版本大约是2MB),这太荒谬了。我计划将这个kendo文件分成几个包,并取消我不想要的控件,但我想稍后处理。
在我的情况下,我有来自供应商的资产的未确定和缩小版本。 I don't need Bundles to minify anything。我需要它做的就是在debug="true"
时发出指向未分解脚本的直接链接,并在debug="false"
时发出指向连接但预先标记的脚本的链接。
在我的BundleConfig.cs中,我一直在使用ScriptBundle
作为我的供应商文件,这将尝试缩小,从而产生了我已经提到的翘起的帽子。使用普通的旧Bundle
给我提供了我需要的功能,而不是试图缩小,并节省了大量的内存。 Sod off,ScriptBundle
!
答案 1 :(得分:0)
您能否请启用优化
public static void RegisterBundles(BundleCollection bundles)
{
// your bundling goes here
BundleTable.EnableOptimizations = true;
}