我正在编辑我之前在循环中使用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";
}
}
这只是一个例子,如果您知道一个可以帮助我的主题,请发布它
答案 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
string
(string
是不可变类,无法修改);在循环中重新创建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