2009-02-20 57 views
1

我有一个asp.net应用程序,使用JSON将数据序列化到客户端。一旦加载达到一定的水平,应用程序在GC中花费了一个坐标时间,并花了一些时间与WinDbg/SOS和相关工具后,似乎有大量的LOH碎片发生,因为生成的JSON的大小常常大到超过LOH的86K边界。.NET大对象堆和JSON交互

我的问题2折 1)有没有人运行JSON生成影响和导致LOH碎片的这种特定情况,并且 2)有没有人对如何处理它有任何建议。

回答

1

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

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

如果你不能这样做,你可能不得不求助于对象池,这将不会在字符串上工作,你将不得不求助于char []或byte [](MemoryStream将使这一点变得简单)和重用支持数组。可能每个线程一个就足够了。你可能想要处理那些不常见的大量响应会导致底层数组膨胀然后被保留的情况。