You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载10MB JS文件时@Scripts.Render()抛出System.OutOfMemoryException错误

解决@Scripts.Render()加载大JS文件时的OutOfMemoryException异常

嘿,我之前也踩过这个坑!当你用@Scripts.Render()引入10MB级别的JS文件时,WebGrease.dll会因为内存不足抛出异常——毕竟它默认的内存配置扛不住这么大的文件在压缩/合并过程中的内存开销,而小文件因为内存占用低就没问题。给你几个实用的解决思路:

  • 直接跳过该文件的bundling处理
    这是最直接有效的办法。@Scripts.Render()本质是让WebGrease帮你做合并压缩,对于超大文件,我们可以用普通的<script>标签单独引入,绕开WebGrease的内存密集型处理:

    <!-- 其他小脚本继续用bundling -->
    @Scripts.Render("~/bundles/common")
    <!-- 单独引入大文件,不经过WebGrease处理 -->
    <script src="@Url.Content("~/Scripts/your-10mb-file.js")"></script>
    

    这样既保留了其他脚本的bundling优势,又避免了大文件触发内存异常。

  • 调整WebGrease的内存配额(可选)
    如果你一定要把大文件加入bundle,可以尝试在web.config里增大WebGrease的内存限制。在<configuration>节点下添加:

    <webGrease enableMinification="true" enableOptimization="true">
      <limits maxBytes="20971520" /> <!-- 设置为20MB,按需调整 -->
    </webGrease>
    

    注意:要确保你的项目是非Debug模式(或者在BundleConfig里强制开启了优化),因为Debug模式下bundling默认是关闭的,WebGrease不会处理文件。不过即使调大内存,超大文件还是可能存在性能隐患,所以这个方法不如第一个稳妥。

  • 拆分大JS文件(推荐长期方案)
    10MB的JS文件本身就不太合理,不仅容易触发内存问题,还会拖慢页面加载速度。建议按功能模块把它拆分成多个小文件,再加入bundle中:

    // 在BundleConfig.cs里配置拆分后的文件
    bundles.Add(new ScriptBundle("~/bundles/largeModule")
        .Include("~/Scripts/module-a.js")
        .Include("~/Scripts/module-b.js")
        .Include("~/Scripts/module-c.js"));
    

    拆分后WebGrease处理每个小文件的内存压力会小很多,同时浏览器还能并行加载多个小文件,提升页面性能。

另外,如果你用的是旧版本的WebGrease,可以尝试升级到最新稳定版,新版本对大文件的内存处理可能有优化,但这只能作为辅助手段,核心解决思路还是上面的三种。

内容的提问来源于stack exchange,提问作者Gourab dhargupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:22:32