小编use*_*846的帖子

一旦构建一个大字符串并将其传递给response.write或为每个字符调用response.write,它是否更有效

我们在ASP.Net 4.0网站上遇到了每日OutOfMemoryExceptions.我们怀疑其中一个问题是LOH碎片,所以我们一直在寻找可以更有效地分配内存的代码更改.

例如,我们正在生成一个我们想要返回浏览器的大字符串(2mb).分页数据不是一种选择.

是否更有效:

  1. 在StringBuilder中构建字符串,然后对Response.Write(bigString)or 进行一次调用
  2. 通过重复调用来逐字写出字符串 Response.Write(smallString)

如果我按照选项1然后我有一个大字符串占用LOH上的空格,然后被复制到Response对象的内部缓冲区.所以这似乎我现在至少暂时在LOH上有两个大块.

如果我按照选项2那么我正在处理大量的小字符串,这些字符串会被垃圾收集,并且只有LOH上的一个大块用于Response对象的缓冲区.

所以在我看来选项2更好.

我理解正确吗?

该服务器有4GB的Ram,并运行Windows 2003 32位.这是服务器上运行的唯一站点.因此每个进程都有一个4GB的地址空间,但只有2GB可用.当虚拟字节大约达到1.8Gb时,我们开始收到OOM错误,然后我们回收解决问题大约24小时的站点.专用字节在500-800mb之间变化.我认为问题不在于我们的物理内存不足.

c# asp.net out-of-memory memory-fragmentation

5
推荐指数
1
解决办法
518
查看次数

标签 统计

asp.net ×1

c# ×1

memory-fragmentation ×1

out-of-memory ×1