1

我有一个使用 JSON 将数据序列化到客户端的 asp.net 应用程序。一旦负载达到一定水平,应用程序将在 GC 中花费大量时间,并且在使用 WinDbg/SOS 和相关工具一段时间后,由于生成的 JSON 的大小,似乎发生了大量 LOH 碎片通常大到足以超过 LOH 的 86K 边界。

我的问题是 2 倍 1) 有没有人运行这种 JSON 生成的特定场景会影响并导致 LOH 碎片和 2) 有没有人对如何处理它有任何建议。

4

1 回答 1

1

如果您要生成大量 > 85K 的字符串,那么无论如何这都是有问题的性能。

在将数据发送给客户端之前,您是否需要完全生成数据?如果您的 JSON 库支持将数据写入 Stream/TextWriter 并且客户端响应 api 支持它,我将简单地将一个链接到另一个完全解决问题。

如果你不能做到这一点,你可能不得不求助于对象池,这对字符串不起作用,你将不得不求助于 char[] 或 byte[] (A MemoryStream 将使这变得容易)并重用支持数组. 可能每个线程一个就足够了。您可能需要处理不常见的大规模响应导致底层数组膨胀然后被保留的情况。

于 2009-02-20T18:21:47.193 回答