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