2013-07-12 111 views
0

在我的C#Windows應用程序Web緩存在Windows應用程序引起的應用程序加載延遲

我有這個樣的C#類 公共類clsRslCache { 私人緩存oCache = HttpRuntime.Cache; }

我在主要方法中創建了這個類的一個實例,在應用程序的啓動過程中,它導致約2-3分鐘的延遲,然後在隨後的請求中立即加載應用程序。

我不確定爲什麼是第一次延遲發生。如果我在機器上等待5分鐘不要結束對它做任何事情,下一次我啓動我的Windows應用程序時,它顯示相同的行爲。

有沒有人有任何想法。

*注意:您需要在Windows應用程序中引用System.web.dll。

感謝

+0

我想如果你等到HttpRuntime啓動並運行之前訪問HttpRuntime.Cache會快很多。我的猜測是你迫使早期的http服務器初始化。 (如果您的應用程序中沒有運行http服務器,那麼無論您第一次打電話,它都必須執行初始化) – 2013-07-12 18:52:52

+0

您能否請您用僞代碼解釋您的聲明。並且該機器沒有安裝iis。我試圖在c#windows應用程序中使用緩存機制 – andy

回答

0

好吧,假設HttpRuntime.Cache是​​你從ASP.Net使用的唯一的事情:

的httpRuntime的從MSDN類描述:

提供一組ASP的。 NET運行時服務的當前 應用程序。

因此,生活在System.web.dll中的Web服務器有一小部分,這是訪問它的一個主要API。第一次調用System.web.dll時,必須初始化,這需要花費一些時間(儘管分鐘驚人的是10-20秒似乎更可能)。

有一兩件事你可以嘗試正在初始化在一個子線程:

volatile bool isCacheReady = false; 
Cache cache = null; 
System.Threading.Thread t1 = new System.Threading.Thread(delegate() { 
    cache = HttpRuntime.Cache; 
    isCacheReady = true; 
}); 
t1.Start(); 

// periodically check if cache is available yet (not here in this thread though): 
if(isCacheReady) 
{ 
    // do something with cache 
} 

當然,這仍然意味着你的應用程序不會有緩存的2-3分鐘,但至少它不應該塊啓動。 (我應該更深入,因爲2-3分鐘似乎太長,應該有一種方法來加速或使用另一個緩存工具,開銷較少)

+0

感謝您的建議,但仍想知道延遲2-3分鐘的原因,它只發生在我的一個特定的客戶端。它是由於一些網絡或防火牆設置這個電話會花費很多時間。 – andy