WPFでListboxにコンテンツ表示が異常に遅い

Listboxこんなに遅い?

WPFにListboxを配置し、その中のstackpanelにItemを表示していたらめちゃくちゃ遅くてとても使い物になりませんでした。

スクロールしようとしても遅いし、なにやっても遅いのです。

このプログラムのその部分は管理側しか使わない機能だったので、皆様にはごめんなさいして遅いまま使っていただいていたのですが、やっと解消しました。

解決報告

ここ数年の懸案だった分けですが、解決したので報告です。ただ、他の方とは、はまりポイントが違う気がするので参考になる方は少ないかも。

VertualizatingStackPanel

まず試したのは、Listbox内にVertualizatingStackPanelを配置して、見えていない部分はレンダリングしないという手法です。ただ疑念があったのは、私のプログラムはリストとしても200〜300程度。数千とか、数万のリスト表示をしているわけではないのです。

本家サイトから
https://docs.microsoft.com/ja-jp/dotnet/framework/wpf/advanced/optimizing-performance-controls

VertualizatingStackPanelオプションまとめ

こちらのサイトがとても参考になりました。

オプションを全部乗せしたXAMLが表示されていたので、それをコピペして真似して。だけど一向に変わりません。

また、仮想化の概念はこのサイトの方の絵が分かりやすいです。

VertualizatingStackPanelを利用したXAML

まずはVertualizatingStackPanelを利用したXAMLについて

 

XAMLポイントitemsource

XAML itemsourceの引き渡し

 

C#でList作成

C#表記では、Listをこのように引き渡しました

 

List化するクラス

GItemクラスは別途作成してあります

 

結局遅かった原因

Textblockに指定したこのフォントが問題でした。このフォントはプログラムファイルを起動するフォルダに同梱してあります。このフォント指定をやめたら、Listboxが快適に動くようになりました。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です