2009-07-29 20 views
0

複合アプリケーションブロック(「プリズム」)V2でwpfアプリケーションを構築していて、モジュールによって注入されたユーザーコントロールがレンダリングで非常に遅いという問題があります。ユーザーコントロールには2000行のデータグリッドが含まれており、コントロールレンダリングにはかなりの遅延があります。当初、私は遅さがwpfツールキットのDataGridコントロール自体に起因すると考えましたが、これは当てはまりません。データグリッド(TestControl)を含むコントロールを外部モジュールからシェルプロジェクトに移動してそこから直接ロードすると、コントロールは問題なくすぐにレンダリングされます。プリズムアプリ内の他のモジュールからのコントロールをロードするときにシェルに複合アプリケーションブロック領域注入が遅い

this.regionManager.RegisterViewWithRegion("mainRegion", typeof(TestControl)); 

をWPFユーザーコントロールを注入するために私のモジュールにはIModuleの実装で、次のコードを使用して

Imがあり、パフォーマンスの問題はありますか?それらをロードする最も最適な方法は何ですか?それはおそらく、このです

おかげ

答えて

1

ここでの問題は、バックグラウンドスレッドからディスパッチャまでUIが更新されているときに、更新が遅くなっているようです。私はcodeplexで会話を取り上げ、多かれ少なかれソートしました。

http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=64113

1

は、ライフサイクルイベントの成果物です。モジュールがロードされて登録される前に、あなたのシェルはうまく表示されます。これを行うと、モジュールの初期化コードが起動するまでUIに大きな太った穴が表示されるため、表示される時間が長くなります。

多くのサンプルでは、​​ "Shell.Show();"のようなことをしています。あなたのブートストラップのごCreateShell方法では、しかし、あなたはこのようにそれに)(あなたのブートストラップクラスのプライベートメンバーにシェルへの参照を移動して.SHOWを呼び出す検討するかもしれない:

public class Bootstrapper : UnityBootstrapper 
{ 
    Shell shell; 
    protected override DependencyObject CreateShell() 
    { 
     shell = Container.Resolve<Shell>(); 
     return shell; 
    } 

    protected override void InitializeModules() 
    { 
     base.InitializeModules(); 
     shell.Show(); 

    } 

私はこれを試してみました今では私のアプリがパフォーマンスを向上させたような気がするので、私は自分でこの変更を行うつもりだと思う。

モジュールのロードに非常に時間がかかる場合は、CreateShellとInitializeModulesの間にスプラッシュ画面を表示することもできます。

関連する問題