1

我有一个包含很多这样的代码库:

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

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

在 IIS5 或 IIS6 终止工作进程或干脆死掉之前,有没有人有一个经验法则,你可以加载到内存中的最多数据是多少?

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

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

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

4

3 回答 3

1

在本机模式下使用 IIS6,您可以配置每个应用程序池的限制。

对于 IIS5,它使用 machine.config 中的元素作为总系统内存的百分比进行配置 - 默认为 60%。

于 2009-05-30T15:33:12.740 回答
1

对于 IIS 6,您可能会遇到内存回收限制PeriodicRestartPrivateMemory 和 PeriodicRestartMemory。我认为在 XP 上,它是物理内存的 60%。至少那是我对 asp.net 1.1 的记忆,我不确定 2.0

YSOD 可能最好用 try/catch 围绕大分配来处理。

于 2009-05-30T15:36:37.213 回答
1

根据Tess Ferrandez在 TechEd 上的演讲,当您有大约 800MB 的私有字节或 1.4GB 的虚拟字节时,您可以开始在 32 位服务器上看到内存不足异常。

她也有一篇关于为什么会在这里的好帖子:

餐厅类比

她提出的其他观点包括考虑您要序列化到会话中的内容 - 例如,序列化 1MB 数据集可能导致服务器每页使用 15-20MB 内存,因为该数据被序列化和反序列化。

于 2009-05-30T20:35:55.107 回答