我们正在开发一个 .Net 4.0 C# WPF Line-of-business 应用程序,需要向用户显示(只读)大文本文件。TextBlock
如 SO 中所述,这不是一个选项,并尝试了建议的 AvalonEdit 控件。运行 AvalonEdit.Sample 独立应用程序可以在不到一秒的时间内加载一个 8k 行的 4MB 文件,但是将 AvalonEdit 嵌入TextEditor
到我们的 WPF 应用程序中需要花费 20 秒,与之前的TextBlock
.
UI 相当复杂,带有用于树形菜单和表单的拆分器。该表单有几个拆分器来创建可调整大小的区域,其中一个包含一个选项卡控件。其中一个选项卡项具有TextEditor
来自 AvalonEdit。
XAML
<avalonEdit:TextEditor Name="Tbx" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" />
CS
public void ShowFile(string path)
{
Tbx.Text = string.Empty;
ThreadPool.QueueUserWorkItem(o => {
var lines = File.ReadAllLines(path).Join("\n");
Dispatcher.BeginInvoke(() => Tbx.Text = lineas);
});
}
加载文件时,我的笔记本电脑 i7 4 核 CPU 使用率为 33%。
TextEditor
关于 AvalonEdit作为独立应用程序和自定义 WPF 应用程序中的不同行为的任何建议?
如何加载大文件(10MB,10k 行)TextEditor
?
更新:
视觉树:
的属性TextEditor
:
我删除了承载TextEditor
所指出的 ScrollViewer,但实现了同样糟糕的性能。
更新 2:
我将其TextEditor
移至新窗口以减少布局,但性能仍然很差。
新的、简化的可视化树:
Grid
列和行定义是*
.
的属性TextEditor
: