c# - 将大文件加载到 RichTextBox 时的性能问题
问题描述
记事本会在一秒钟内打开一个文本文件(有 20,000 行),但是当我使用richtextbox1.LoadFile()
或File.ReadAllText()
加载文件时需要几分钟!怎么了?
解决方案
无需将文件读入一个数组,然后返回该数组并将每个项目连接成一个字符串,只需Text
使用该方法将整个文件内容读入属性,该ReadAllText
方法返回一个表示文本文件内容的字符串:
richTextBox1.Text = File.ReadAllText(path);
然而,结果好坏参半。两种方法的执行方式相似,ReadLines
+string.Join
花费的时间往往更少。
这是我的测试应用程序:
public partial class Form1 : Form
{
private const string FilePath = @"f:\private\temp\temp.txt";
public Form1()
{
InitializeComponent();
// Create a file with 20,000 lines
var fileLines = new List<string>(20000);
for (int i = 0; i < 20000; i++)
{
fileLines.Add($"This is line number {i + 1}.");
}
File.WriteAllLines(FilePath, fileLines);
}
private void button1_Click(object sender, EventArgs e)
{
// Test loading with ReadAllText
richTextBox1.Text = string.Empty;
var sw = Stopwatch.StartNew();
richTextBox1.Text = File.ReadAllText(FilePath);
sw.Stop();
Debug.WriteLine("ReadAllText = " + sw.ElapsedMilliseconds);
}
private void button2_Click(object sender, EventArgs e)
{
// Test loading with ReadLines and string.Join
richTextBox1.Text = string.Empty;
var sw = Stopwatch.StartNew();
List<string> lines = new List<string>();
lines.AddRange(File.ReadAllLines(FilePath));
richTextBox1.Text = string.Join(Environment.NewLine, lines);
sw.Stop();
Debug.WriteLine("ReadLines + string.Join = " + sw.ElapsedMilliseconds);
}
}
第一次执行时的结果ReadAllText
(以毫秒为单位)
ReadAllText = 157
ReadLines + string.Join = 143
第一次执行时的结果ReadLines
(以毫秒为单位)
ReadLines + string.Join = 160
ReadAllText = 152
推荐阅读
- php - 使用 PHP 从 Google Content API for Shopping 中删除销售价格
- gitlab - 如果提交消息不包含 WIP,则 gitlab 规则
- php - 教义删除必须进行两次
- c# - 为什么我的 PXSmartPanel 在第一次执行后不能显示正确的数据?
- javascript - Mongoose 方法 findOne 耗时过长,有时返回未定义
- swiftui - ScrollView 与 Geometry Reader 结合使用时无法正确滚动(反弹)
- javascript - 如何在 Cypress 中添加正则表达式以过滤掉 xhr URL
- json - 如何使用 jq 更新 json 字符串中的值?
- python - 按标签拆分 swagger json
- python - Python:从同级目录导入文件,其中父目录同名