2017-10-09 7 views
0

ローカルデータをJSONに解析してからJSONをXMLに解析します。 JSONの解析はうまく動作しますが、XMLへの1〜2週間前の解析でもうまくいきました。これは実稼働環境ではありませんでしたが、テストして機能しました。今私は上記の例外を取得します。ここに私のコードは次のとおりです。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でのデータ):\ソース\レポ\最新の\共通\ Utilの\のLiveScoringXml.cs:ライン30"

+2

'try-catch'ブロックを使用して詳細情報を取得しよう –

+3

スタックトレースを表示する必要があります。 –

+0

スタックトレースが追加されました – Jamil

答えて

4

あなたは、64ビットアプリケーション(離れバグからのあなたの問題のほとんどはおそらく理由がある場合.Net Framework)は、Large Object Heapメモリの断片化のために問題が発生していることです。そこには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

それはより良いと思います。どうもありがとう 。 –

関連する問題