→ ssccg: 大檔案不要一次全讀進記憶體啊12/19 09:09
→ ssccg: 用Stream一次處理一部分就好12/19 09:10
→ testPtt: StreamReader 有試過嗎12/19 09:13
不好意思,我用StreamReader也一樣
StreamReader sr =....
while(sr.ReadLine()!=null)
{
}
在六百多萬行就出現outofmemory
※ 編輯: takesi5200 (42.76.110.203), 12/19/2017 10:51:56
→ Laluth: 應該是卡到執行檔使用記憶體的上限 程式改成64bit看看 12/19 13:04
→ Litfal: 不是阿,你讀完放到陣列裡面,不就等於放在記憶體裡 12/19 13:59
→ Litfal: 你文字檔格式是什麼? 12/19 13:59
→ Litfal: UTF-8或ANSI讀出來成String變Unicode,單位元組字多的話, 12/19 14:02
→ Litfal: 讀出來需要的記憶體就翻倍了。1GB檔讀完爆2GB記憶體很正常 12/19 14:03
→ Litfal: 你可以試試用.nf 4.5以上的64bit,或是改寫你每一行處理的 12/19 14:05
→ Litfal: 邏輯 12/19 14:05
推 capercat: 搜尋 gcAllowVeryLargeObject 這個試試 12/19 16:27
推 cancelpc: 改一次讀單列,或 stream 方式處理。 12/19 18:44
→ cancelpc: 剛看到 readline 也有問題! 12/19 18:45
推 cancelpc: 你單列處理完有釋放嗎?還是一直 add 那還不是都放在 me 12/19 18:49
→ cancelpc: mory 裡 12/19 18:49
感謝各位前輩的指點,Initialize()釋放後己經解決此問題
List<String> _sub = new List<string>();
string[] readtext = System.IO.File.ReadAllLines(failpath);
foreach (string s in readtext)
{//將檔案內容放置_sub陣列裡
_sub.Add(s);
counter++;
readtext.Initialize();
}
※ 編輯: takesi5200 (125.231.50.253), 12/19/2017 21:37:21