我需要在控制台应用中读取950mb txt文件,而不会获得System.OutOfMemoryException
,具有以下结构:
"6152902100000017";20110701;20110701;53;"D";30359130;"NOTA DE DEBITO";"DEB.COMPRA BCO";0;;0;"6152902100000017";0;0;0;0;0;"902"
我可以读取较小的文件,但是更大的文件会抛出异常。 有什么建议吗?
答案 0 :(得分:5)
不要将整个文件读入缓冲区。只需要根据需要一次读取多个字节。
答案 1 :(得分:3)
如果你使用StreamReader使用ReadLine()或ReadBlock()来获取文件的一部分。
答案 2 :(得分:3)
以下几乎总会失败,2字节/字符处的950MB太接近2GB限制:
string AllText = File.ReadAllText(fileName);
如果你有4+ GB,那么将它读作一个字符串数组可能会起作用(特别是在64位系统上):
string[] AllLines = File.ReadAllLines(fileName);
但最好的办法是一次处理1行:
// requires Fx4
foreach(string line in File.GetLines(fileName))
{
// use 'line'
}
答案 3 :(得分:2)
您可以在这种情况下使用StreamReader
并从源中一次读取一行,而不是将整个文件放入缓冲区。