2009-02-20 24 views
6

ObservableCollectionにバインドされたWPF ListView/GridViewを使用しているウィンドウがあります。パフォーマンスは非常に恐ろしいです。アイテムが追加/削除/変更されるたびに、アプリケーションは300〜400アイテムとCPU使用率の急上昇を試みます。プロファイリングでは明らかなことは明らかになりません。WPF listview/gridview performance恐ろしい、提案

誰もが何か提案がありますか?

+0

によって使用されているのDataTemplateは、単一のTextBlockが含まれています。 –

答えて

2

まず、ListViewItemごとに複雑なデータテンプレートを使用していますか?これは、たくさんの画像から、古いBitmapEffectsまで、データベースからオンデマンドでデータをフェッチするレイジーロードされたプロパティでさえあります(データモデルの仕方に応じて、各ビジュアルをレンダリングするために多くのdb呼び出しを実行する可能性があります)作品)。

2番目の推測は、ロード/追加/修正/削除されたルーチンを素早く実行できるリスト(データのレンダリング時に問題が発生したことを意味します)、またはリスト自体がそのジョブをゆっくり実行しますいくつかの種類の問題)。

+0

使用されているDataTemplateには、単一のTextBlockが含まれています。 –

+0

データベース呼び出しは行われません。 –

+0

問題を再現するコードをもう少し共有できますか?たぶん、それを引き起こすために最低限しか実行しない単純な新しいソリューションですか? – Adrian

7

これらのプロパティをチェックアウト:

VirtualizingStackPanel.IsVirtualizing="True" 
VirtualizingStackPanel.VirtualizationMode="Recycling" 
ScrollViewer.IsDeferredScrollingEnabled="True" 
1

と明らかに1を、あなたは3.5 SP1を.NETにアップグレードしたことを確認し、そこにパフォーマンスの向上がたくさんありました。

また、WPF datagridviewコントロールを調べる価値があるかもしれません.net 3.5 SP1で多くのパフォーマンス作業が行われていたため、datagridviewは大きなデータセットで優れたパフォーマンスを発揮します。

http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25047

5

この記事で説明したようにあなたは、あなたのListViewのItemSourceを仮想化する必要があります。WPF: Data VirtualizationCodeProjectポールMcClean氏

関連する問題