如何使用c#中的大文本?

时间:2018-02-19 06:14:02

标签: c# algorithm text

我正在编辑我之前在循环中使用if条件编写的一些列表,但如果文本文件大于 20 MB ,则表示 overflow 。如果超过 1 MB ,它将永远加载 。例如

string[] x = File.ReadAllLines(openFileDialog1.FileName);

string a = "";

for (int i = 0; i < x.Length; i++)
{
    if (x[i].Length > 9 && x[i] < 13)
    {
        a += "" + x[i] + "\r\n";
    }
}

这只是一个例子,如果您知道一个可以帮助我的主题,请发布它

2 个答案:

答案 0 :(得分:3)

从将String更改为StringBuilder

开始
string[] x = File.ReadAllLines(openFileDialog1.FileName);

StringBuilder sb = new StringBuilder();

//TODO: x[i] < 13 (taken from the question) seems to be erroneous
// Do you mean x[i].Length < 13?
for (int i = 0; i < x.Length; i++)
  if (x[i].Length > 9 && x[i] < 13) 
    sb.AppendLine(x[i]);

string a = sb.ToString();

下一次尝试可以是 Linq ,如下所示:

string a = string.Join(Environment.NewLine, File
  .ReadLines(openFileDialog1.FileName)
  .Where(line => line.Length > 9 && line.Length < 13));

执行a +=时,您重新创建 a stringstring是不可变类,无法修改);在循环中重新创建string 似乎致命的慢StringBuilder是专为此类案件设计的课程。

答案 1 :(得分:1)

你应该使用BufferedStream对象来读/写更大的文件,这也会缩短执行时间。

   using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
   using (BufferedStream bs = new BufferedStream(fs))
   using (StreamReader sr = new StreamReader(bs))
   {
    string line;
    while ((line = sr.ReadLine()) != null)
    {
       //write your logic here
    }
   }

更新: 浏览链接以获取最快的文件读取方式 Fastest way to read file