我们在ASP.Net 4.0网站上遇到了每日OutOfMemoryExceptions.我们怀疑其中一个问题是LOH碎片,所以我们一直在寻找可以更有效地分配内存的代码更改.
例如,我们正在生成一个我们想要返回浏览器的大字符串(2mb).分页数据不是一种选择.
是否更有效:
Response.Write(bigString)or 进行一次调用Response.Write(smallString)如果我按照选项1然后我有一个大字符串占用LOH上的空格,然后被复制到Response对象的内部缓冲区.所以这似乎我现在至少暂时在LOH上有两个大块.
如果我按照选项2那么我正在处理大量的小字符串,这些字符串会被垃圾收集,并且只有LOH上的一个大块用于Response对象的缓冲区.
所以在我看来选项2更好.
我理解正确吗?
该服务器有4GB的Ram,并运行Windows 2003 32位.这是服务器上运行的唯一站点.因此每个进程都有一个4GB的地址空间,但只有2GB可用.当虚拟字节大约达到1.8Gb时,我们开始收到OOM错误,然后我们回收解决问题大约24小时的站点.专用字节在500-800mb之间变化.我认为问题不在于我们的物理内存不足.