GACからDLLをロードすると、アプリをブロックしています
質問
最後の数ヶ月私のアプリケーションは、どんどん大きく成長しました。これは、両方が同じコードを共有し、現時点でWPF .EXEとXBAPとして実行可能です。アプリケーション、アプリケーションのロックのいくつかの点で。 invertigating後、私は、アプリケーションがこれらの瞬間でGACからDLLをロードしていることが分かりました。
何が起こるかというと、アプリケーションが起動するということです、これは数秒かかり、ユーザーがログオン画面が表示されます。それがアプリケーションの残りの部分のためのDLLのすべての種類をロードする必要があるため、現時点では、ユーザは、アプリケーションのロックをログオンし、[OK]ボタンをクリックしてください。彼らはすべてのアニメーションの再生を停止UIスレッドからロードされているので、イベントOKボタンのマウスオーバーが完了していません。
これは、秒としてスタートしましたが、いくつかの点で、現時点ではあなたはアプリを続行する前に数分待たなければなりません。私はそれがunexceptableだと思います。
別のスレッドにGACからのDLLのロードを移動する方法はありますか? -animationを再生することができるので、「アプリケーションがロードされるまでお待ちください」?または、より良い、私はアプリの起動に必要なすべてのDLLのロードを移動することができますので、以下の作業時に行くそこに待っていることでしょう。
解決
はい(少なくとも、「秒」のため、それは「分」にスケールわからない) - ログイン画面で、ちょうど(ThreadPool
でおそらく)ワーカースレッドをスピンアップこれらのアセンブリを必要とする何かをしています。これは、それらをロードします...
ThreadPool.QueueUserWorkItem(LoadAssemblies);
...
static void LoadAssemblies(object state)
{
Widget1 widget = new Widget1(); // but just let it go (perhaps dispose it)
}
あなたは、ユーザーが自分のパスワードながら、あなたのアセンブリをロードし、UIスレッドから外れなりました。