2017-11-01 15 views
5

私はいくつかの巨大なxmlファイル、1 + gbを持っています。私はそれらといくつかのフィルタリング操作を行う必要があります。私が作ってみた最も簡単なアイデアは、彼らからTXTとReadAllTextとして保存し、C#でOutOfMemory例外を回避するには?

var a = File.ReadAllText("file path"); 
    a = a.Replace("<", "\r\n<"); 

のようないくつかの操作をやって起動するために、私はそれをしよう瞬間が、しかし、プログラムがメモリ不足にクラッシュしています。私はそれを実行している間に私のタスクマネージャーを見て、RAMの使用率は50%に上昇し、それがプログラムに到達する瞬間に死ぬ。

OutOfMemory例外を回避してこのファイルをどのように操作するか、またはプログラムがより多くのメモリを使用できるようにするための考え方はありますか?

+3

文字列ではなくストリームを使用します。 –

+0

交換品は「フィルタリング」ですか、それとも別のものですか?とにかく['XmlReader'](https://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v = vs.110).aspx)を見てください。 (私はそれが正しいと思います) – Ryan

+0

一般に、XMLを「単なる文字列」として扱うのを避けるようにしてください。あなたが作り出そうとしているものがXMLではなく、「XMLのように見えますが、私は技術的にそうでないような奇妙なことをしています。 XMLこれ以上 " –

答えて

4

File.ReadAllTextで「すべてをメモリに読み込む」の代わりに「File.ReadLines」と「1度に1つの行に収まる」と言うことができます。

これは、遅延実行を使用するIEnumerableを返します。あなたが遅延実行についての詳細を学びたいのであれば、あなたはthis githubのページを確認することができます

using(StreamWriter sw = new StreamWriter(newFilePath)) 
foreach(var line in File.ReadLines(path)) 
{ 
    sw.WriteLine(line.Replace("<", "\r\n<")); 
    sw.Flush(); 
} 

:あなたはこのようにそれを行うことができます。

関連する問題