.Net 4.0 C# WPF 基幹業務アプリを開発しており、(読み取り専用) 大きなテキスト ファイルをユーザーに表示する必要があります。TextBlock
SOに記載されているように、オプションではなく、提案されたAvalonEditコントロールを試しました。AvalonEdit.Sample スタンドアロン アプリを実行すると、8,000 行の 4MB ファイルを 1 秒未満でロードできますが、AvalonEditTextEditor
を WPF アプリに埋め込むと、前の とほぼ同じ 20 秒かかりTextBlock
ます。
UI は非常に複雑で、ツリー メニューとフォームのスプリッターがあります。フォームには、サイズ変更可能なゾーンを作成するためのスプリッターがいくつかあり、そのうちの 1 つにタブ コントロールが含まれています。タブ項目の 1 つに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% です。
スタンドアロン アプリとしての AvalonEdit の動作とTextEditor
、カスタム WPF アプリ内での AvalonEdit の動作の違いについて何か提案はありますか?
で大きなファイル (10MB、10k 行) をロードする方法はTextEditor
?
アップデート:
ビジュアル ツリー:
のプロパティTextEditor
:
指摘されたとおりにホストする ScrollViewer を削除しましたTextEditor
が、同じようにパフォーマンスが低下します。
更新 2:を新しいウィンドウ
に移動しTextEditor
てレイアウトを縮小しましたが、それでもパフォーマンスが低下します。
新しい簡素化されたビジュアル ツリー:
Grid
列と行の定義は*
.
のプロパティTextEditor
: