簡體   English   中英

如何使用StreamReader讀取非常大的文本文件?

[英]How could I read a very large text file using StreamReader?

我想讀取一個大的.txt文件,並且由於其龐大而導致內存溢出。

有什么幫助嗎?

    private void button1_Click(object sender, EventArgs e)
    {
        using (var Reader = new StreamReader(@"C:\Test.txt"))
        {
            textBox1.Text += Reader.ReadLine();
        }
    }

文本文件就是:

Line1
Line2
Line3

從字面上看就是這樣。

我想將文本文件直接加載到多行文本框中,即100%復制。

通過以下操作,您將獲得更快的性能:

textBox1.Text = File.ReadAllText(@"C:\Test.txt");

這也可能有助於解決內存問題,因為在每次讀取的行中分配連續較大的字符串會浪費大量內存。

當然,GC應該在看到OutOfMemoryException之前收集舊字符串,但是無論如何我還是要給上面的鏡頭做個OutOfMemoryException

首先,您發布的代碼只會將文件的第一行放入TextBox 您想要的是:

using (var reader = new StreamReader(@"C:\Test.txt"))
{
    while (!reader.EndOfStream)
        textBox1.Text += reader.ReadLine();
}

現在,對於OutOfMemoryException :我還沒有測試過,但是您是否嘗試過TextBox.AppendText方法而不是使用+= 后者肯定會分配大量的字符串,到您接近文件末尾時,大多數字符串將接近整個文件的長度。

就我所知, AppendText也可以做到這一點。 但是它的存在使我懷疑它已經放置在這里以應對這種情況。 我可能是錯的-就像我說的,還沒有親自測試。

一次讀取並處理一行,或者將其分成多個塊並分別處理。 您還可以向我們展示您擁有的代碼,並告訴我們您要使用它完成什么。

這是一個示例: C#讀取包含由制表符分隔的數據的文本文件請注意ReadLine()WriteLine()語句。

TextBox受它可以容納的字符數的嚴格限制。 您可以嘗試在RichTextBox上使用AppendText()方法。

首先使用富文本框而不是常規文本框。 它們可以更好地適應您正在使用的大量數據。 但是,您仍然需要讀入數據。

// use a string builer, the += on that many strings increasing in size
// is causing massive memory hoggage and very well could be part of your problem
StringBuilder sb = new StringBuilder();

// open a stream reader
using (var reader = new StreamReader(@"C:\Test.txt"))
{
    // read through the stream loading up the string builder
    while (!reader.EndOfStream)
    {
       sb.Append( reader.ReadLine() );
    }
}

// set the text and null the string builder for GC
textBox1.Text = sb.ToString();
sb = null;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM