[英]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.