[英]How can I read and parse very large flat file using thread in C#?
我必须读取一个大文本文件并使用C#逐行解析它。 对于小型文件,可以使用StreamReader
轻松完成,但在处理大型文件时会出现内存不足的问题。 如何使其适应大文件?
以下代码捕获OutOfMemoryException
:
using (StreamReader reader = new StreamReader(FileNameWithPath))
{
while ((line = reader.ReadLine()) != null)
{
// Do something here...
}
}
这几乎是惰性读取器的标准代码,除非有一些非常大的单行,否则不应该导致OutOfMemoryException
。 你也可以尝试:
foreach(var line in File.ReadLines(FileNameWithPath)) {
// Do something here...
}
它只是使它更干净,但做同样的事情。 所以有两种选择:
我希望后者更有可能。
我不确定这个,但尝试这类.net框架
MemoryMappedFile类 - 内存映射文件将文件内容映射到应用程序的逻辑地址空间。 内存映射文件使程序员能够处理非常大的文件,因为可以同时管理内存,并且它们允许完全随机访问文件而无需搜索。 内存映射文件也可以跨多个进程共享。
using (var inputFile = new System.IO.StreamReader(sourceFilePath))
{
while (inputFile.Peek() >= 0) {
string lineData = inputFile.ReadLine();
// Do something with lineData
}
}
如何指定缓冲区大小?
像这样。
using (var reader = new StreamWriter(path,false,Encoding.UTF8, 1000))
{
.....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.