1

ここ数か月、私のアプリケーションはどんどん大きくなりました。現時点では、Wpf .EXE および XBAP として実行可能で、どちらも同じコードを共有しています。アプリケーションのいくつかのポイントで、アプリケーションがロックされます。調査した結果、この時点でアプリケーションが GAC から dll をロードしていることがわかりました。

何が起こるかというと、アプリケーションが開始されます。これには数秒かかり、ユーザーにはログオン画面が表示されます。現時点では、ユーザーは [OK] ボタンをクリックしてアプリケーション ロックにログオンします。これは、残りのアプリケーション用にすべての種類の dll をロードする必要があるためです。これらは UI スレッドから読み込まれるため、すべてのアニメーションの再生が停止し、[OK] ボタンのマウスオーバーが終了しません。

最初は数秒でしたが、現時点では、アプリが続行するまで数分待たなければならない場合があります。例外ではないと思います。

dll の読み込みを GAC から別のスレッドに移動する方法はありますか? 「アプリケーションが読み込まれるまでお待ちください」というアニメーションを再生できますか? または、さらに良いことに、必要なすべての dll の読み込みをアプリの開始時に移動できるので、作業中の待ち時間が少なくなります。

4

1 に答える 1

2

はい(少なくとも「秒」、「分」にスケーリングするかどうかはわかりません)-ログイン画面で、ThreadPoolそれらのアセンブリを必要とする何かを行うワーカースレッドを(おそらく で)スピンアップします。これにより、それらがロードされます...

ThreadPool.QueueUserWorkItem(LoadAssemblies);
...
static void LoadAssemblies(object state)
{
    Widget1 widget = new Widget1(); // but just let it go (perhaps dispose it)
}

これで UI スレッドから離れ、ユーザーがパスワードを入力している間にアセンブリをロードします。

于 2009-02-25T07:41:42.463 に答える