gpt4 book ai didi

c# - 一次构建一个大字符串并将其传递给 response.write 或为每个片段调用 response.write 是否更有效

转载 作者:太空狗 更新时间:2023-10-29 23:45:38 27 4
gpt4 key购买 nike

<分区>

我们的 ASP.Net 4.0 网站每天都会遇到 OutOfMemoryExceptions。我们怀疑其中一个问题是 LOH 碎片,因此我们一直在研究可以更有效地分配内存的代码更改。

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

是否更有效:

  1. 在 StringBuilder 中构建字符串,然后调用 Response.Write(bigString)
  2. 通过重复调用 Response.Write(smallString) 来零碎地写入字符串

如果我遵循选项 1,那么我会得到一个占用 LOH 空间的大字符串,然后将其复制到 Response 对象的内部缓冲区。所以这看起来我现在至少暂时在 LOH 上有 2 个大块。

如果我遵循选项 2,那么我将处理许多被垃圾收集的小字符串,并且只有 LOH 上的一个大块用于响应对象的缓冲区。

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

我理解正确吗?

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com