2013-01-18 19 views
0

這裏是場景: 我有一個DLL的方法,從數據庫獲取數據,根據傳遞參數,進行各種檢查,並給我所需的數據。使用不同的參數調用相同的方法 - 如何使用多線程?

GetGOS_ForBill(AgencyCode) 

在一個Windows應用程序中,我有listbox列表500 +機構。 我檢索每個機構的GOS附加到通用列表。 如果用戶選擇了所有機構(現在500+),則需要大約10分鐘。從dll返回數據。

我們雖然關於後臺處理。但是這並不能減少時間,除了用戶在屏幕上做其他事情之外。考慮多線程。

有人可以幫我嗎?什麼是正確的方法,我們如何使用多線程來完成?

+0

使用'Parallel'類。 – SLaks

+0

所有取決於如何實現該dll方法,如果它將支持多線程或不。 –

+0

緩存可能有幫助... – daryal

回答

4

順便問一句,我認爲你沒有太多的多線程和多線程的經驗是不是一個只是簡單的話題,並通過Stackoverflow quesiton扔掉。如果你不知道你在做什麼,我會強烈反對使用多線程...而不是一個問題,你會有兩個。

在你的情況下,性能問題不是使用線程來獲得並行工作負載,而是正確構造問題。

現在你正在查詢每個機構單獨哪個工作正常的幾個機構,但很快退化。查詢本身可能很快,問題是您正在運行該查詢500次。相反,你爲什麼不嘗試在一個查詢中獲得所有代理的所有GOS(這可能會很快)並將其存儲在內存中(比如說一個字典)。然後在需要時檢索適當的GOS集合。

如果最常見的情況是用戶只是選擇其中的幾個,您可以始終建立一個閾值...如果選定的數字少於30,每個查詢,否則運行一般查詢和檢索記憶。

+0

我同意,我沒有任何多線程的經驗。 – Sandhya

+0

你對我的要求的理解也是對的。由於我沒有得到你所建議的解決方案將如何幫助。即使你必須把它放在內存中,它仍然需要花費10分鐘。如果我選擇所有機構的權利。除了多線程外,我願意接受其他建議。 – Sandhya

+0

沒有。如果它是對數據庫的查詢,則可能性是一個查詢檢索所有數據將比檢索數據子集的500個查詢快得多。現在你可能正在做類似於GOF的SELECT *,其中AgencyCode = xxx大約500次...我建議將它從GOF更改爲SELECT *,然後讀取所有記錄並根據agecy_code將它們存儲在內存中 –

相關問題