2009-02-25 62 views
1

最近幾個月,我的應用程序變得越來越大。它現在可以作爲Wpf .EXE和XBAP運行,兩者共享相同的代碼。在應用程序的幾個點上,應用程序鎖定。在轉換之後,我發現應用程序在這些時刻正在從GAC加載dll。從gac載入dll阻止應用程序

會發生什麼情況是應用程序啓動,這需要幾秒鐘,並且用戶會看到一個登錄屏幕。此時用戶單擊確定按鈕登錄應用程序鎖,因爲它必須爲應用程序的其餘部分加載各種dll。因爲它們是從UI線程加載的,所有動畫都停止播放,所以OK按鈕的鼠標懸停沒有完成。

它以秒開始,但目前有些時候您需要等待幾分鐘才能繼續應用。我認爲這是不可接受的。

有沒有辦法將dll的加載從GAC移動到另一個線程?因此,「請稍候,加載應用程序」 - 動畫可以播放?或者,更好的辦法是,我可以將所需的所有dll加載到應用程序的開始位置,以便在工作時減少等待時間。

回答

2

是的(對於「秒」,至少;不確定它縮放到「分鐘」) - 在登錄屏幕上,旋轉一個工作線程(可能與ThreadPool),這需要那些程序集。這將導致他們加載...

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

您現在已經關閉UI線程,加載程序集,而用戶鍵入他們的密碼。

+0

我以爲我嘗試過這樣的建築,但這次它工作。謝謝! – Sorskoot 2009-02-25 08:53:05