ASPX.NET应用程序无缘无故地出现内存异常

问题描述

| 这是要解决的问题:当我的Web服务器启动时,它将创建几个带有非常小的对象(例如1-2-3 int)的冗长(20M个元素)的数组。任何单个阵列的累积大小都不得大于2GB(CLR的限制,有关更多详细信息,请参见下面的链接)。 w3wp.exe的内存使用量确实增长了近2GB(从未超过此数量)。该代码在“ 0”平台模式下编译,并在具有8GB RAM的Windows 7 x64上运行。 到底是什么使我在创建列表时抛出OutOfMemoryException?如果我通过IIS或VS托管进程,这有什么区别吗? PROD似乎没有发生这种情况,但是我一直在我的开发机上遇到这种情况。 (将尝试立即重新启动...) 这可能是相关的,但我似乎没有那么大的对象: .Net中的非常大的集合会导致内存不足异常 编辑: 在IIS或VS中运行确实有所不同-在IIS中启动进程时看不到这种情况。那么这可能是VS调试器的局限性吗?     

解决方法

根据您更新的问题,很明显Visual Studio不在64位模式下运行。因此,在Visual Studio下,您的限制为2GB。 这篇文章可能包含一些有助于证明这一事实的代码: 如何使用.NET检测Windows 64位平台?     ,可能是内存分配没有优化(即以较小的步骤和调整大小)。这有可能使堆碎片化,从而不再有足够的连续可用空间来存储“半大”数组。 该分配失败,并且根据定义,这种情况是OOM,即使可能有很多堆碎片可用。通常,过度使用linq可能会导致这种情况。在某个时候,延迟执行会失去吸引力,您可以通过在战略要地执行一两个“ .ToList()”来购买大量性能/资源(以我的经验,通常接近于开始时)您的生成过程,大部分数据都到达了)。     ,检查您是否将apppool回收阈值设置为2GB http://technet.microsoft.com/zh-cn/library/cc732519%28WS.10%29.aspx     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...