我有一个asp.net应用程序,它使用JSON将数据序列化到客户端。一旦负载达到一定水平,应用程序在GC中花费一段时间,并且在花费一些时间使用WinDbg / SOS和相关工具之后,由于生成的JSON的大小,似乎发生了大量的LOH碎片。通常大到足以超过LOH的86K边界。
我的问题2折 1)是否有人运行这种特定的JSON生成场景影响并导致LOH碎片和 2)有没有人对如何处理它有任何建议。
答案 0 :(得分:1)
如果您要生成大量>无论如何,85K字符串然后是有问题的表现。
在将数据发送到客户端之前是否需要完全生成数据?如果您的JSON库支持将数据写入Stream / TextWriter并且客户端响应api支持它,那么我只需将一个链接到另一个完全可以解决问题。
如果你不能这样做,你可能不得不求助于对象池,这对字符串不起作用,你将不得不求助于char []或byte [](MemoryStream会使这很简单)并重用支持阵列。可能每个线程一个就足够了。您可能希望处理这样的情况:通过一个不常见的大规模响应导致底层阵列膨胀然后被保留。