2017-10-09 124 views
0

我解析本地數據到JSON,然後我解析JSON到XML。解析爲JSON可以正常工作,而且我非常肯定,一兩個星期前解析爲XML也能正常工作 - 它不在生產中,但是我測試了它並且工作正常。現在我得到上述例外。這裏是我的代碼:System.OutOfMemoryException當讀取MemoryStream

public static string ParseData(Data data) 
{ 
    string xmlString = string.Empty; 
    XmlData xmlData = new XmlData(data); 

    using (MemoryStream memoryStream = new MemoryStream()) 
    using (StreamReader reader = new StreamReader(memoryStream)) 
    { 
     xmlSerializer.WriteObject(memoryStream, xmlData); 
     memoryStream.Position = 0; 
     xmlString = reader.ReadToEnd(); //exception occurs here 
    } 
    return xmlString; 
} 

當異常發生時memoryStream.Position的價值等於它的長度,我仍然有像RAM 200-300萬桶。它是64位應用程序和64位系統。我查了類似的問題,但在我的情況下,沒有大量的數據(json最大爲1.5mb)。

已更新。堆棧跟蹤:

「在System.Text.StringBuilder.ToString(個)\ r \ n在 System.IO.StreamReader.ReadToEnd(個)\ r \ n在 Common.Util.LiveScoringXml.ParseData(數據數據) C:\來源\回購\最新\ COMMON \的Util \ LiveScoringXml.cs:第30" 行

+2

嘗試使用'try-catch'模塊獲取更多信息 –

+3

您必須向我們顯示堆棧跟蹤。 –

+0

已添加堆棧跟蹤 – Jamil

回答

4

如果你有一個64位應用程序,最可能的原因,你的問題的(除了一個bug .Net框架)是由於大對象堆內存的碎片而導致問題,因此大於80k的任何對象都存儲在那裏。

檢查以下幾個環節:

Why Large Object Heap and why do we care?

https://blogs.msdn.microsoft.com/dotnet/2011/10/03/large-object-heap-improvements-in-net-4-5/

你可能會產生數據的大塊經常和破碎的LOH,直到你不能找到一個連續的大塊足夠大。

有策略來解決像重用對象,而不是創建和GC'ing他們的問題。

+1

我從來沒有勇氣說「_ ...唯一可能的原因是... _」就是我一生中遇到的任何事情。 –

+1

@UweKeim:好的,我會重申一下這個答案,所以它不那麼勇敢。無論如何,這是比什麼都更文化的東西,西班牙人說話比德國人不同:) –

+0

這聽起來更好。非常感謝 。 –

相關問題