vs2010內(nèi)存分析的方法
vs2010內(nèi)存分析的方法
想要弄清vs2010內(nèi)存分析的結(jié)果,可以通過基于軟件的工具檢測,和使用程序的檢測方式。為此學(xué)習(xí)啦小編為大家整理推薦了,希望大家喜歡。
vs2010 內(nèi)存分析
其實VS已經(jīng)提供基于CPU占用情況的性能分析功能,但它并不能什么情況都能分析出來。當(dāng)你發(fā)現(xiàn)mscorwks.dll這玩意占用著大量的資源,確無法點擊進去的看具體情況的時候有可能會感到無能為力,也許已經(jīng)盡力了那些.net framework的事情管不了。其實mscorwks.dll的損耗和我們編寫的代碼有著緊密的聯(lián)系,我們可以通過VS的內(nèi)在分析工作看下代碼的內(nèi)存分配狀況然后再查找問題。
打開性能分析向?qū)?/p>
選擇內(nèi)存分配采樣即可。
運行后會產(chǎn)以下的結(jié)果圖:
圖中可以看到占用字節(jié)最多的方法和分配最多字節(jié)的類型,我們可以點擊內(nèi)存分配最多的類型看下詳細列表
在這里我們可以看到byte[]和char[]分配了大量的內(nèi)存,而這些通過cpu性能分析是看不到的,而這些對像的創(chuàng)建和銷毀都會使用的資源的。我們可以點擊一下看這些內(nèi)存分配是那里產(chǎn)生的。
從上面的圖可以看到byte[]的分配主要是來源于池的初始化,既然是必須的就不用考慮那是必須做的。再來看下char[]來源于每次寫入的Encoding.Getbytes里的string.ToCharArray();反編譯看下代碼情況:
從代碼可以看到原因所在,因為GetBytes需要一個char[],而string每次獲取char[]都是返回一個新提char[]對象。其實這兩個對象都提供基于char[]操作和copy的到char[]的方法。仔細看下MSDN你就能找到你想要的:)這里我就不多說了。
調(diào)整一下代碼后的分析結(jié)果又怎樣呢?
調(diào)整一下char[]的分配一下子就少了:)創(chuàng)建的對象少了,分配的內(nèi)存少了,那內(nèi)存回收就不用說了。