我有很多这样的代码库:
byte[] contents = FileUtils.FileToByteArray(FileOfGartantuanProportions);
我不控制我的IIS服务器,因此我看不到系统日志或执行检测,我只是看到我的请求无法返回(白页死机),有时YSOD内存不足错误。
在IIS5或IIS6杀死工作流程或只是龙骨和死亡之前,有没有人有经验可以加载到内存中的最多数据?
或者更好的是,我有一个API调用,例如:
if(!IsEnoughMemoryFor(FileOfGartantuanProportion.Length)) throw new SomeException() ;
在我的XP专业版工作站上,我可以获得一个ASP.NET页面来成功处理内存中非常大的字节数组,但这些结果显然不适用于真正的共享服务器。
答案 0 :(得分:1)
在IIS6处于纯模式时,您可以为每个应用程序池配置限制。
使用IIS5,它使用machine.config中的元素作为系统总内存的百分比进行配置 - 默认值为60%。
答案 1 :(得分:1)
对于IIS 6,您可能会遇到memory recycling limits PeriodicRestartPrivateMemory和PeriodicRestartMemory。我认为在XP上,它占物理内存的60%。至少那是我记得的asp.net 1.1,我不确定2.0
YSOD最好用大量分配的try / catch来处理。
答案 2 :(得分:1)
根据Tess Ferrandez在TechEd上的讲话,当你有大约800MB的私有字节或1.4GB的虚拟字节时,你可以开始在32位服务器上看到Out Of Memory异常。
她也有一篇很好的帖子,说明为什么会这样:
她提出的其他观点包括考虑你正在序列化会话 - 例如序列化1MB数据集可能导致每个页面服务器上使用15-20MB内存,因为数据被序列化和反序列化。