对于中等大小的文件,StreamReader 非常慢。
Very slow StreamReader for medium sized files.
我正在将文本文件读入程序(它们是 Unicode 代码,输出必须是 utf-8)。下面的代码适用于较小的文件(大约 150 行,其中行只有一个字),但是当我在较大的文件上使用它时(比如 20.000 行,哪一行仍然只有一个字)程序需要大约半分钟来完成它的任务。我应该写新代码,还是有办法优化它?
int next;
string storage = "";
using (StreamReader sr = new StreamReader(path))
{
while( (next = sr.Read()) != -1 )
{
storage += Char.ConvertFromUtf32(next);
}
sr.Close();
}
使用 StringBuilder 代替 String:
int next;
StringBuilder storage = new StringBuilder();
using (StreamReader sr = new StreamReader(path)) {
while ((next = sr.Read()) != -1) {
storage.Append(Char.ConvertFromUtf32(next));
}
sr.Close();
}
string result = storage.ToString();
所以,当我使用不同的 StreamReader 时,一切都开始非常顺利,
using (StreamReader sr = new StreamReader(path, Encoding.Unicode))
这个,让我得到格式正确的字符串,而不是 int 指示字符,这大大提高了速度。
我正在将文本文件读入程序(它们是 Unicode 代码,输出必须是 utf-8)。下面的代码适用于较小的文件(大约 150 行,其中行只有一个字),但是当我在较大的文件上使用它时(比如 20.000 行,哪一行仍然只有一个字)程序需要大约半分钟来完成它的任务。我应该写新代码,还是有办法优化它?
int next;
string storage = "";
using (StreamReader sr = new StreamReader(path))
{
while( (next = sr.Read()) != -1 )
{
storage += Char.ConvertFromUtf32(next);
}
sr.Close();
}
使用 StringBuilder 代替 String:
int next;
StringBuilder storage = new StringBuilder();
using (StreamReader sr = new StreamReader(path)) {
while ((next = sr.Read()) != -1) {
storage.Append(Char.ConvertFromUtf32(next));
}
sr.Close();
}
string result = storage.ToString();
所以,当我使用不同的 StreamReader 时,一切都开始非常顺利,
using (StreamReader sr = new StreamReader(path, Encoding.Unicode))
这个,让我得到格式正确的字符串,而不是 int 指示字符,这大大提高了速度。