2009-02-20 40 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將使這一點變得簡單)和重用支持數組。可能每個線程一個就足夠了。你可能想要處理那些不常見的大量響應會導致底層數組膨脹然後被保留的情況。