2009-11-23 68 views
1

我正在開始一個C#項目,其中某些任務將被分解並在多個線程上運行。我正在尋找儘可能多的好工具來幫助確保我儘可能高效地運行。所以我想看看資源(CPU)使用率,阻塞,死鎖,等待工作的線程等等。我希望能夠比較不同的方法,以瞭解在不同條件下最好的方法。監視多線程.NET應用程序的工具,技巧和竅門

我也在研究Perfmon計數器對於優化和比較線程模型有多大用處。

我也買不起任何太貴的東西,所以free-er越好越好。

這是一個關於.NET 3.5的C#項目,使用VS 2008(儘管我可以使用VS 2010測試版,如果它爲線程提供了更多幫助,我聽說過它)。

謝謝。

編輯:我絕對在尋找Perfmon的建議,以及任何其他工具,當我想要在生產環境中監控應用程序時,我也可以使用它。因此,需要調試工具,但我也希望工具適用於非調試環境。謝謝。

進一步編輯:這裏是因爲我問的問題我已經找到了一些有用的鏈接:

回答

1

通過創建一個記錄器類並檢測我的代碼,以便我可以在線程啓動和停止並測量其內部進程的已用時間時捕獲到最佳結果。您還可以使用各種.Net庫來捕獲這裏提到的內存負載:How to get memory available or used in C#

我已經登錄到隊列,數據庫(System.Data.Sqlite非常適合這個)和文件。即使是一個cobmination queue->數據庫,並且記錄器在一個單獨的線程上。這對多線程Windows服務特別有用,因爲我可以在運行時監視日誌,甚至通過一個小型Windows應用程序通過單獨的控制表來控制日誌冗長。即使系統管理員也很容易使用。

這並不是那麼多額外的工作,並且一旦部署完成後,您總能獲得。

3

事實上的Visual Studio 2010是一個不錯的選擇:http://www.danielmoth.com/Blog/2009/05/parallel-tasks-new-visual-studio-2010.html

+0

哇。這看起來不錯。其中一個問題是:2010年是否需要像以前的VS版本那樣從2008年「升級」您的項目? – goheen 2009-11-23 10:23:36

+0

請參閱此處:http://stackoverflow.com/questions/916190/vs2010-and-vs2008-project-compatibility – Konamiman 2009-11-23 10:30:43

+0

您可以升級解決方案和項目,但仍舊定位舊的框架版本。多重定位依然可用。 – 2009-11-23 10:31:50

2

一號「技巧「在調試線程時幫助我記住設置每個線程的名稱屬性,因爲它在調試過程中有很大幫助。如果線程的Name屬性未分配,則它具有空值,調試窗口將顯示<No name>,所以它不會很有幫助。

0

我知道這是一個C#問題,但仍然是:在C#中,您可以使用任何CLR庫,包括用F#編寫的庫。在F#中,很多情況下由於其功能性(並沒有副作用),併發變得非常容易。也許用F#編寫一些部分可能會付出代價。

1

我建議的另一件事是:暴露你的一些類爲wmi實例。這樣您就可以調整設置和調用函數而無需重新啓動應用程序,這樣您可以立即注意到效果。文章見this