2011-09-12 4 views
0

私のアプリケーションは、そのタイプに基づいて約5つの異なるDataTemplateをListBoxItemのセットに適用しています。これらのアイテムは、特定のx、yポイントでキャンバスに配置されます。私はListBoxで仮想化を実装していて、レンダリングスレッドのプロセスを完了するのにかかる時間は改善されていないようです。ユーザーがUIを完全にロードして使用できるようにするには、まだ8〜12秒かかります。私は仮想化がこの問題を解決するのに役立つだろうと思ったが、周りを見回しただけでプロセスが助けになるように見えるスクロール大量のデータ。私はこの前提を訂正し、他の誰かがレンダリングスレッドを改善するためのヒントを持っていますか?これが唯一の問題で、私のプロジェクトが完成しました。ありがとうStackOverflow!仮想化後にレンダリングスレッドがまだ遅い

+2

XAMLを表示できますか? – Bas

+0

私はコードを投稿することはできません、ごめんなさい。私はそれを十分に一般化してここに置くことができるかどうかを見ていきます。これは非常に大きなコードセットですが、私はそれがまったく役に立たないことを知っています。 – jes9582

+0

VSから実行している場合にのみ問題が発生します。 .exeを直接実行すると問題は解決しますか?表示されないバインディングエラーが発生することがあります。 presentationtrace = highに設定して一度実行し、エラーが発生したかどうかを確認してください。 – Paparazzi

答えて

0

はい、ListBox仮想化はスクロール用です。 ListBox内に多数のアイテムがある場合、仮想化を有効にすると表示アイテム(スクロール用のいくつかの余分なアイテム)のみがレンダリングされ、ListBoxをスクロールすると、新しいアイテムがレンダリングされる代わりにレンダリングされたアイテムに置き換えられます。

あなたには、いくつかのコードを投稿した場合、おそらく我々はいくつかのパフォーマンスを支援でき仮想化は、あなたが目に見える持っている唯一の項目が作成されることを意味

+0

私は会議の後にいくつかの一般的なコードを投稿します。私はコードを投稿するための厳しい方針の下にあります。 – jes9582

1

を微調整し、動的に/あなたがスクロールするよう作成された新しいアイテムを破壊しました。もう1つの方法は、すべての項目に対してすべてのUIコントロールを一度に作成することです。

これは、アプリの残りの部分で大きな問題があるようです。バックグラウンドスレッドですべての読み込み操作を実行しますか? UIコントロールツリーは本当に複雑ですか?あなたは100または1,000のアイテムを表示していますか?

1

また、WPFのパフォーマンスに多くの問題がありました。もちろん、あなたのアプリケーションをプロファイルするのが最善の方法です。 ANTS Performanceプロファイラを使用していますが、.NETプロファイラはこれを行います。私たちはXAMLリソースの検索のために、大きなパフォーマンスを達成しました。それは私があなたに与えることができることです: XAMLのすべてのリソースを最小限に抑えてみてください。しかし、それだけでなく、あなたが持っているXAMLファイルの量を最小限に抑えるようにしてください。あなたが試みることができる1つのことは、DataTemplateの複雑な部分の読み込みを尊重することです。ブラウザーでJPEGを読み込むと何が起こるかと同じように、最初に、JPEGの読み込みが終了した後に細かくなるピクセル化されたイメージが表示されます。これを達成するには、最初はより簡単なDataTemplateを使用し、次に表示されている場合は、複雑なテンプレートをオンデマンドでロードします。 しかし、あなたの特定の問題の詳細がなければ、私たちは推測することしかできません。 Thisは、似たような主題についての私の古い質問です。多分これも助けになります。

+0

私はdowhileforと同様の経験を持っていました。 SP1が助けになり、再起動したようだ – Paparazzi

関連する問題