我試圖使用任務並行庫從UI線程卸載昂貴的ADO.NET數據庫訪問(以前,我正在重寫的程序將簡單地凍結,偶爾會更新VB6文本框與其進度,直到數據庫中的數據完全加載)。我有一個複雜的依賴關係結構(26個單獨的任務),我試圖弄清楚它有多少值得並行化。並行訪問SQL Server
我想知道這樣的IO訪問是否可以與性能獎勵並行。如果不是的話,我只是順序地加載數據,並在每次加載足夠的信息來執行該任務時更新UI,但通過一次加載兩件事而不是一次加載可以獲得額外的提升(即使我沒有得到雙倍加速)。
我試圖使用任務並行庫從UI線程卸載昂貴的ADO.NET數據庫訪問(以前,我正在重寫的程序將簡單地凍結,偶爾會更新VB6文本框與其進度,直到數據庫中的數據完全加載)。我有一個複雜的依賴關係結構(26個單獨的任務),我試圖弄清楚它有多少值得並行化。並行訪問SQL Server
我想知道這樣的IO訪問是否可以與性能獎勵並行。如果不是的話,我只是順序地加載數據,並在每次加載足夠的信息來執行該任務時更新UI,但通過一次加載兩件事而不是一次加載可以獲得額外的提升(即使我沒有得到雙倍加速)。
並行化可能會提高性能,但不能保證可能。這一切都取決於你的瓶頸在哪裏。
例如,如果一個請求由於加載了大量數據而很昂貴,那麼它可能會消耗很多客戶端網絡帶寬。如果有的話,在這種情況下並行並不會有多大幫助。
如果,另一方面,瓶頸是SQL處理和您的SQL請求將保留在自己的瓶頸閒置產能的SQL Server,那麼你就可以從SQL服務器(非常好)並行能力中獲利。
並行化也可能會降低速度。例如,如果SQl服務器沒有太多內存並且只能訪問單個磁盤,則強制它並行執行多個查詢可能會導致硬盤上的查找活動更多,這可能會顯着降低總體讀取速度。
因此,正如往常一樣,答案不是簡單的是或否,而是「取決於」。
謝謝!這正是我想要的:當*可以*有幫助。我們使用功能非常強大的機器,我將不得不剖析網絡使用情況,看看發生了什麼。我仍然可以在發生的時候使用其他網絡密集型程序,所以我不認爲它正在吃東西。 – Crisfole 2010-12-20 21:31:52