[翻譯]編寫高性能 .NET 代碼 第一章:工具介紹 -- Visual Studio

<<返回目錄

Visual Studio

vs雖然不是全宇宙唯一的IDE,但它是.net開發人員最常用的開發工具。它自帶一個性能分析工具,你可以使用它來做開發,不同的vs版本在工具上會略有差別。

應該是vs2013的圖

這個是vs2015的截圖

VS可以分析CPU使用率,內存分配以及資源鎖情況。它能在你開發與運行中對項目做綜合的測試。

它很強大,可以準確的測量運行了生產環境數據的大型應用程序。但是它集成在vs裏面,如果你希望在生產環境下使用,需要有一個獨立的性能監控工具。這個微軟幫你想好了,從vs2013以後的版本里,在安裝光盤裏有一個獨立版本。

這個是我安裝時的截圖

安裝好後可以在命令行模式下使用
1.從安裝後的測試工具目錄下執行,或者將安裝目錄添加到環境變量Path裏。(福利,64位安裝後目錄:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools )
2.執行:VsPerfCmd.exe /Start:Sample /Output:outputfile.vsp
3.運行你要測試的軟件
4.執行:VsPerfCmd.exe /Shutdown

這樣你可以獲得一個outputfile.vsp文件,再拖本地的vs裏進行分析

我測試了一下,可用,但是進入cmd時需要管理員模式纔行

VsPerfCmd.exe 還支持很多參數,除了上面例子裏的(Sample),你還可以選擇:
Coverage(覆蓋)—蒐集代碼覆蓋率數據
Concurrency(併發)—收集資源的併發數據
Trace—用於收集方法的執行時間和次數

Smple 模式會每隔幾毫秒中斷一次你的進程,並獲得堆棧信息。這個是獲得你CPU使用率的最佳方式。但是,它並不能很好的記錄I/O訪問,當然它不會增加太多的CPU使用量,它可以幫你記錄整體的運行時間。

Trace 模式則需要修改每個函數用來記錄每次調用的時間情況。這會入侵你的代碼,導致程序執行會變慢。然而,它雖然會花費更多的時間用於記錄每個函數的情況,但它可以記錄更準確的信息,特別是I/O訪問。

Coverage(覆蓋)模式不是用於性能分析,但可以讓你知道哪些代碼被執行過。這是一個很好用的功能,在你運行單元測試時,可以知道你的測試覆蓋了哪些代碼。有些商業產品可以幫助你做這些,但你還可以爲自己做得更好。

Concurrency(併發)模式記錄當通過鎖或其他同步對象對資源發生爭用時發生的事件。此模式可以告訴你,如果你的線程由於競爭而被阻塞。有關異步編程和測試應用中鎖爭用量的更多信息,請參見第四章。

Visual Studio裏的性能測試 工具是最好用的工具,但是他也相當的貴(恩,說的是國外,國內的大家請自行忽略)。如果你不能使用vs,我們也提供一些免費的替代產品。幾乎所有的性能工具都使用相同的底層機制(至少在Windows 8 / Server 2012及以上內核中)
ETW事件。ETW是Windows的事件追蹤,他是操作系統以快速並高效的方式記錄所有的日誌信息。所有的應用程序都可以產生這些事件,分析器可以捕捉這些事件進行分析。第8章裏會描述如何利在自己的程序裏跑出或者捕捉這些事件。

下一節 >> 性能計數器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章