我正在編寫解析大型非可預測文件的程序。這部分沒有問題。我一直在使用下面的代碼,循環ReadLine直到文檔結束,以保持內存佔用低。我的問題是一個OutOfMemoryException
當一條線太長了。C#讀取塊執行
System.IO.StreamReader casereader = new System.IO.StreamReader(dumplocation);
string line;
while ((line = casereader.ReadLine()) != null)
{
foreach (Match m in linkParser.Matches(line))
{
Console.Write(displaytext);
Console.WriteLine(m.Value);
XMLWrite.Start(m.Value, displaytext, dumplocation, line);
}
}
XMLWrite只是寫我的正則表達式匹配功能以XML文檔的任何字符串。正則表達式函數是一個簡單的電子郵件搜索。這個問題發生在ReadLine被調用時,應用程序在我正在讀取的文件中發現一條非常長的行(我可以看到這是因爲任務管理器中的內存使用率隨着它填充字符串'行'而攀升並攀升)。最終它耗盡內存並崩潰。我想要做的是讀取預定義的塊(例如8,000個字符),然後通過相同的過程一次運行這些塊。這意味着我將總是知道字符串行的長度(8,000個字符),並且不應該接收和內存不足異常。我的邏輯看起來是邏輯的嗎?我正在尋找實現ReadBlock的最佳方式,因爲目前我無法使其工作。
任何幫助非常感謝!
問題是你仍*失去內存?如果不是,你的問題是什麼?您意味着第一個代碼塊有OOM問題,並且讀取預定義的塊會修復該問題。 – 2012-08-07 15:42:04
發生了什麼?錯誤? – 2012-08-07 15:42:14
你會得到什麼錯誤?你有什麼問題?我沒有在Visual Studio中嘗試你的代碼,但邏輯看起來不錯......編譯器是在抱怨嗎? – 2012-08-07 15:42:28