2013-10-20 70 views
0

我正在研究大約35批次更新許多數據庫,作爲我們日常工作過程的一部分。每一批都是在單一的網絡應用程序中開發的。由於數據庫問題,我已經將它們全部收集在一個Windows應用程序中以利用數據庫連接池,並且我爲每個批次分配了一個背景工作器。在應用程序中達到20批次,每件事情都很好。但是,當我爲任何其他批處理添加其他背景工作時,應用程序掛起。我認爲這是因爲我在一個進程中運行太多線程。有沒有針對這個問題的解決方案,例如,使應用程序與許多進程一起工作?? !!! Regards,winforms應用程序中的多處理

注意, 我已經爲此應用程序(Core i7 cpu,8 gb ram)分配了一臺機器。

+0

線程的數量應該與您的問題的原因無關。請更具體地說明您的代碼在哪裏掛起。使用調試器查看程序線程掛起時的狀態。如果您確信自己知道哪些是掛起/有問題的代碼,請將其發佈到此處以便我們提供幫助。 – elgonzo

+0

親愛的elgonzo,問題是用戶界面掛着,我不能最小化或最大化窗口,我不能按任何按鈕。我只需要一種方法,讓所有這些背景工作者都能更快地執行UI。感謝您的回覆。 – user2489259

+0

使用調試器。現在你要求我們在黑暗中捅一捅,然後盲目猜測。也許你有一個僵局,也許你有太多的數據庫連接打開,也許有些不同。誰知道...? – elgonzo

回答

0

多少數據庫,您必須更新?

我認爲這是比較推薦擁有的線程數爲數據庫的數量

+0

很好的解決方案,但每批都有特定的工作和不同的運行時間。即每30秒運行一次,每5秒運行一次,以此類推。 – user2489259

0

如果在許多背景工作者活躍你的UI被凍結,但恢復時,這些背景的工人很可能是完成處理,然後UI線程正在執行一個方法,該方法等待來自其中一個後臺工作線程的結果或信號。

要解決你的問題,你將不得不尋找一個與同步/多線程涉及UI相關的代碼。這可能是.NET正在使用的衆多同步對象中的一個(包括lock語句)的地方,但它也可能涉及「啞」輪詢循環a-ka while(!worker.IsFinished) Thread.Sleep();

另一個可能的原因凍結可能是你在後臺線程運行的工人(或工人相關法)偶然在UI線程來代替。

但你會發現當你使用調試器。

爲了使您的狩獵範圍的可管理問題的方法,讓你的程序在調試器中運行,直到UI凍結。此時,在調試器中暫停程序執行。看看UI線程正在處理哪些代碼,然後您將找到一個有問題的代碼實例。 (不管有錯,我不能告訴你 - 因爲我不知道你的代碼。)

這很可能是在你的代碼不同的UI相關的方法將同樣的問題受到影響。所以,如果你發現有問題的代碼(並且能夠修復它),你會想檢查其他有問題的方法,但這應該是相當容易的,因爲在那個時候你會知道該找什麼...