Visual Studio 15的內(nèi)存占用探析

責(zé)任編輯:editor005

作者:Jeff Martin

2016-10-31 16:02:42

摘自:INFOQ

Jeff Martin撰寫了一系列關(guān)于Visual Studio “15”性能分析的文章。盡管測(cè)量工具已經(jīng)提供了一些內(nèi)存占用量減少的證據(jù),但是開發(fā)者們獲知這一消息后,針對(duì)微軟采用的一些方案提出了許多問題。

Jeff Martin撰寫了一系列關(guān)于Visual Studio “15”性能分析的文章。在他的上一篇文章《Visual Studio “15”的啟動(dòng)優(yōu)化》中曾提到,微軟已承諾全面提升Visual Studio “15” IDE的性能。本文將從內(nèi)存處理的角度,探討他們?cè)赥echnical Preview 5(TP5)中所做的提升:在主程序保留為一個(gè)32位進(jìn)程的同時(shí),將部分關(guān)鍵組件遷移到微軟獨(dú)有的進(jìn)程。

在微軟任職的Ashok Kamath針對(duì)這些改變?cè)凇禫isual Studio “15”的內(nèi)存溢出崩潰減少優(yōu)化》一文中做了更多的介紹,以便能從更全面的視角來看待這些改變。他提供了一種方法來度量微軟開發(fā)團(tuán)隊(duì)所作出的改進(jìn)。他提供了2個(gè)不同的指標(biāo):虛擬內(nèi)存峰值PVM(Peak Virtual Memory)和個(gè)人工作集峰值PPWS(Peak Private Working Set)。PVM指的是VS15主進(jìn)程所占用的總內(nèi)存數(shù)。由于主進(jìn)程是32位的,因此它的最大值被限制為4GB內(nèi)存。PPWS指的是VS15的devenv.exe和相關(guān)進(jìn)程所占用的物理內(nèi)存數(shù)。

首先被移出VS15主進(jìn)程的是JavaScript語言服務(wù)。JavaScript語言服務(wù)提供智能提示、代碼導(dǎo)航等功能。新的JavaScript服務(wù)由一個(gè)獨(dú)立的Node.js進(jìn)程協(xié)同VS15提供對(duì)JavaScript和TypeScript的支持。Kamath團(tuán)隊(duì)通過在VS 2015 Update 3(Visual Studio之前的一個(gè)版本)和VS15 Preview 5中加載WebSpaDurandal方案來測(cè)量新服務(wù)的性能影響。在VS15 Preview 5中,PVM占用量大約減少了33%,但是PPWS的占用量減少得非常少,幾乎可以忽略不計(jì)。

第二個(gè)內(nèi)存優(yōu)化的部分是關(guān)于調(diào)試器中的符號(hào)加載。縱觀Visual Studio的近期發(fā)布?xì)v史,他們已經(jīng)通過高侵入性地從PDB文件中預(yù)加載符號(hào)數(shù)據(jù)來讓C++調(diào)試器運(yùn)行地更快。但是這個(gè)方案有一個(gè)弊端,那就是會(huì)消耗大量的內(nèi)存。在VS15中,這個(gè)預(yù)加載功能被重寫。新的預(yù)加載功能致力于只加載需要的信息而不是像之前那樣“大而全”地加載。為了測(cè)量這一改進(jìn),Kamath團(tuán)隊(duì)用VS 2015 Update 3和VS15 Preview 5打開Unreal Engine方案,并使用調(diào)試器調(diào)試Unreal Engine進(jìn)程。結(jié)果,VS 2015 Update 3不能執(zhí)行這個(gè)操作,因?yàn)樗鼤?huì)因?yàn)閮?nèi)存溢出錯(cuò)誤而崩潰;TP5可以執(zhí)行這個(gè)操作,占用大約3GB PVM和大約1.8GB PPWS。

第三個(gè)被移出主進(jìn)程的是關(guān)于Git的組件。Visual Studio的先前版本使用libgit2庫,但是在TP5中改用git.exe。通過使用Chromium包測(cè)量這個(gè)改進(jìn),發(fā)現(xiàn)在TP5中VS主進(jìn)程占用了0GB PVM,而VS2015占用了大約300B PVM。至于PPWS的占用量,兩者大致相當(dāng)。

盡管測(cè)量工具已經(jīng)提供了一些內(nèi)存占用量減少的證據(jù),但是開發(fā)者們獲知這一消息后,針對(duì)微軟采用的一些方案提出了許多問題。首先提到的是,更頻繁的內(nèi)存交換可能導(dǎo)致可用性下降。另外,一位名為“Syka”的評(píng)論者提出,盡管從主進(jìn)程中移出部分組件會(huì)解除內(nèi)存占用方面的限制,但是可能會(huì)造成潛在的性能下降。因?yàn)榭邕M(jìn)程的進(jìn)程通信相對(duì)于原來的進(jìn)程內(nèi)部的組件調(diào)用來說,會(huì)造成更高的通信成本。此外,一些評(píng)論者提到,Visual Studio的真實(shí)問題并不是內(nèi)存占用,而是由于主進(jìn)程是32位而導(dǎo)致的尋址空間的稀缺。為此,他們?cè)俅魏粲跷④浤軌蜷_發(fā)64位版本的Visual Studio(詳情可參考《讓VS擴(kuò)展支持64位》)。

作者簡介

Jeff Martin擁有密歇根大學(xué)的MBA學(xué)位,曾在金融領(lǐng)域有所建樹,但是為了緊隨時(shí)代潮流,毅然投身計(jì)算機(jī)產(chǎn)業(yè)。他在業(yè)余時(shí)間喜歡和妻子一起旅行,閱讀和編程。他剛著作了一本新書,《Visual Studio 2013 Cookbook》??梢栽赥witter上關(guān)注他,http://twitter.com/jeffemartin。

查看英文原文:Addressing Visual Studio 15's Memory Usage

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)