c# - 如何在自定义 WPF C# 项目中的 AvalonEdit 控件中加载大文本文件

标签 c# wpf avalonedit

我们正在开发 .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 行)?

更新:

视觉树:

Visual tree

TextEditor 的属性:

TextEditor properties

我删除了托管 TextEditor 的 ScrollViewer,但性能仍然很差。

更新 2: 我将 TextEditor 移动到新窗口以减少布局,但性能仍然很差。

新的、简化的视觉树:

Visual Tree 2

Grid 列和行定义为*

TextEditor 的属性:

TextEditor properties

最佳答案

查看应用程序的可视化树(Snoop 可能有帮助)并查看 TextEditor 控件周围是否有任何 ScrollViewer。

滚动查看器为包含的控件提供无限空间,这将禁用任何 UI 虚拟化并破坏性能(编辑器需要呈现整个文档,而不仅仅是可见部分)。

如果您出于某种原因需要嵌套滚动查看器,请查看我在 Nested Scroll Areas 上的回答。问题以查看如何避免为包含的控件提供无限空间。

关于c# - 如何在自定义 WPF C# 项目中的 AvalonEdit 控件中加载大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751159/

相关文章:

c# - 使用 AvalonEdit 自定义超链接

c# - 如何在 asp.net 自托管 API 中启用 CORS?

c# - Windows UI 自动化 : Get selected object from C# ListBox control

java - 从 .Net 调用 Java 方法

wpf - 数据网格复制同时保留字符串结构

c# - AvalonEdit - 可见文本

c# - 在 c# 中使用页脚模板在 GridView 中添加新行

wpf - 使 DataTemplate 可混合

c# - 为用户控件内的列表框设置项目模板

avalonedit - 在 AvalonEdit 中捕获/修改粘贴事件