使工作流程回收所需的使用量内存的经验法则?

时间:2009-05-09 20:56:37

标签: c# .net asp.net worker-process

我有很多这样的代码库:

byte[] contents = FileUtils.FileToByteArray(FileOfGartantuanProportions);

我不控制我的IIS服务器,因此我看不到系统日志或执行检测,我只是看到我的请求无法返回(白页死机),有时YSOD内存不足错误。

在IIS5或IIS6杀死工作流程或只是龙骨和死亡之前,有没有人有经验可以加载到内存中的最多数据?

或者更好的是,我有一个API调用,例如:

  if(!IsEnoughMemoryFor(FileOfGartantuanProportion.Length)) throw new SomeException() ;

在我的XP专业版工作站上,我可以获得一个ASP.NET页面来成功处理内存中非常大的字节数组,但这些结果显然不适用于真正的共享服务器。

3 个答案:

答案 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异常。

她也有一篇很好的帖子,说明为什么会这样:

  

A restaurant analogy

她提出的其他观点包括考虑你正在序列化会话 - 例如序列化1MB数据集可能导致每个页面服务器上使用15-20MB内存,因为数据被序列化和反序列化。