再談Visual Studio 11的性能

fmms 13年前發布 | 7K 次閱讀 Visual Studio

我們上次討論性能的時候,微軟的 Larry Sullivan 就強調,PerfWatson 對于生成可評審的性能數據很重要,那讓 Visual Studio 團隊可以做出改善。Sullivan 現在可以告訴大家,他的團隊已經可以處理這些數據,并對 VS11 做出了特定的改變。

虛擬內存

Sullivan 首先討論了團隊對 Visual Studio 內存需求所采用的方法。他們并沒有把程序轉換為本地的 64 位應用程序,從而訪問更多內存,而是決定把重點放在如何更有效地使用 32 位進程所提供的內存。這樣,團隊首先處理的是 VS 中消耗內存最多的 DLL。他們檢查了 800 多個 DLL,看其中是否存在對內存低效和過度使用的情況。

消耗內存第二多的就是 VS 中各種組件所使用的本地堆結構(native heap)。除了降低內存使用之外,這次任務的過程中還發現“上百次機會,可以找到‘準備就緒’的缺陷,團隊在將來可以修正它們”。

最終的結果是,“當使用 Visual Studio 載入 Web 解決方案的時候,會少載入接近 300 個 DLL 庫,并節省差不多 400MB 的虛擬內存”。在報告中沒有直接提到對于其他類型解決方案獲得的性能提升,但是 Sullivan 在以下評論中說到:

我能夠找到擁有那些現成數據的人。在 Beta 版中,對于 C++ 來說虛擬內存表現平平,但是我們會在下一個 Beta 版中做出更大改進。在 Beta 版中大概能夠節省 35MB,那差不多是 12% 的提升。我們會繼續為 C++ 開發者改善 Visual Studio 11。

解決方案載入時間提升

解決方案的加載時間會影響所有 VS 用戶,團隊通過引入異步加載解決方案來解決這個問題。微軟 Visual Studio Pro 團隊的 Nathan Halstead 提供了關于這個方法的信息,VS 會分兩個階段來加載項目,模式加載(Modal Loading)和后臺加載(Background Loading)。

在模式加載階段,VS11會基于上次會話打開的文件,載入用戶可能需要用到的項目。如果其他項目和打開的項目有依賴關系,那么也會在這個階段載入。不重要的項目會被安排到后臺階段載入。

后臺加載階段會解包 UI 線程,并開始在后臺處理剩余的加載任務。如果用戶的動作表名需要未加載的項目,那么 VS 會在繼續進行后臺加載之前把那個加載過程放到前面來。

“編譯-編輯-調試”循環

最后,Visual Studio Ultimate 團隊的 Tim Wagner描述了對日常“編譯-編輯-調試”循環所做出的改變。Wagner 說到,VS 的構建版只是要完成功能,而性能會在 VS 11 Beta 版中做出提升。不幸的是,Wagner 的說法專注于 Windows 8 上 Metro 應用程序開發的性能,那是 VS11 特定的功能,與 Visual Studio 之前版本有很大區別。

微軟的首席項目經理 Ayman Shoukry 提供了關于 C++ 性能的一些暗示:

在 VC++ 的編譯器和連接器方面,我們做出了多項提升, 特別是讓 Dev11 的編譯器可以進行多線程處理。因此,在構建某些大型內部微軟產品的時候,我們看到編譯時間有了很大改善。我們會發布更詳細的博客,說明在 Dev11 VC++ 中做出的構建時間方面的改善。

盡管這些改善還沒有完成,但 Wagner 承諾說:

這里關于進展的報告并不意味著我們已經滿足于 Beta 版的性能——我們會一直努力,爭取在 Dev 11 中獲得更多改善。

查看英文原文:Visual Studio 11 Performance Revisited

來自: InfoQ

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!