我们正在开发 .Net 4.0 C# WPF 业务线应用程序,需要向用户显示(只读)大型文本文件。 SO 中所述的 TextBlock
不是一个选项,并尝试了建议的 AvalonEdit 控件。运行 AvalonEdit.Sample 独立应用程序可以在不到一秒的时间内加载一个 4MB 的文件和 8k 行,但是当将 AvalonEdit TextEditor
嵌入到我们的 WPF 应用程序中时花费 20 秒,几乎与之前的 文本 block
。
UI 相当复杂,有一个用于树形菜单和表单的分隔符。该窗体有几个拆分器来创建可调整大小的区域,其中一个包含选项卡控件。其中一个选项卡项具有来自 AvalonEdit 的 TextEditor
。
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%。
关于 AvalonEdit TextEditor
作为独立应用程序和在自定义 WPF 应用程序中的不同行为有什么建议吗?
如何使用 TextEditor
加载大文件(10MB,10k 行)?
更新:
视觉树:
TextEditor
的属性:
我删除了托管 TextEditor
的 ScrollViewer,但性能仍然很差。
更新 2:
我将 TextEditor
移动到新窗口以减少布局,但性能仍然很差。
新的、简化的视觉树:
Grid
列和行定义为*
。
TextEditor
的属性:
最佳答案
查看应用程序的可视化树(Snoop 可能有帮助)并查看 TextEditor 控件周围是否有任何 ScrollViewer。
滚动查看器为包含的控件提供无限空间,这将禁用任何 UI 虚拟化并破坏性能(编辑器需要呈现整个文档,而不仅仅是可见部分)。
如果您出于某种原因需要嵌套滚动查看器,请查看我在 Nested Scroll Areas 上的回答。问题以查看如何避免为包含的控件提供无限空间。
关于c# - 如何在自定义 WPF C# 项目中的 AvalonEdit 控件中加载大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751159/