我一直在用.NET 4.0中的並行庫進行討論。最近,我開發了一個定製的ORM,用於我們大型系統必須使用的一些不尋常的讀/寫操作。這允許我用屬性修飾一個對象,並通過反射找出它必須從數據庫中提取哪些列,以及必須在寫入時輸出哪些XML。.NET 4.0中的多線程和性能
因爲我設想這個包裝可以在許多項目中重用,所以我想盡可能多地擠出包裝。該庫將主要用於.NET Web應用程序。我正在使用一次性控制檯應用程序來測試框架,以查看我創建的類。
我現在已經學會了多線程附帶的開銷。多線程會導致它運行速度變慢。從閱讀的角度來看,長久以來一直這樣做的人看起來很直觀,但實際上這對我來說是違反直覺的:如何運行一個方法30次在同一時間比運行它要慢30次按順序?
我不認爲我是由多個線程必須爭奪同一個共享對象導致的問題(雖然我還不夠好,但它還沒有確定),所以我假設減速是來自產生所有這些線程和運行時間的開銷,使它們保持直線。所以:
- 雖然我主要是作爲一個學習練習,這是悲觀嗎?對於微不足道的非IO任務,是多線程矯枉過正?我的主要目標是速度,而不是UI的響應或任何東西。
- 在IIS中運行相同的多線程代碼會導致它加速,因爲線程池中已經創建的線程,而現在我正在使用一個控制檯應用程序,我認爲這應該是單線程的,直到我告訴它除此以外?我即將進行一些測試,但我認爲有一些基礎知識,我很想知道爲什麼這將是一種方式或其他方式。我的控制檯應用程序也運行在具有兩個內核的桌面上,而Web應用程序的服務器會有更多,所以我可能不得不使用它作爲變量。
加一點什麼西蒙說,線程的最佳數量是一件困難的事情找到,因爲它往往依賴於一般的系統負載和你的代碼是幹什麼的,我最好的建議是試驗高負荷,看看什麼產生最佳性能。 – Lazarus 2010-01-12 16:21:12
@Lazarus。是的,我完全同意,這是非常真實的。它也可以是非常系統特定的。這是你可能想以某種方式公開爲設置的事情,所以可以根據具體情況進行調整,並且有一些很好的默認設置。 – 2010-01-12 16:42:04