锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
: 闄や簡榪欎釜紼嬪簭涔嬪娌℃湁鍏跺畠紼嬪簭澶ч噺鍗犵敤鍐呭瓨銆傝繖涓▼搴忔湁澶ч噺紓佺洏IO鎿嶄綔錛屽湪榪愯涓細涓嶆椂鍦拌皟鐢℅C.Collect()浠ュ強鏃舵竻鐞嗕笉鐢ㄧ殑鍐呭瓨銆傝繖涓疄楠屼腑鐢ㄥ埌鐨勪竴緋誨垪紼嬪簭鐨勭粨鏋勫熀鏈浉鍚岋紝閮戒細涓嶆椂璋冪敤GC娓呯悊錛屼絾鍏跺畠紼嬪簭鐨勫唴瀛樹嬌鐢ㄩ兘姝e父錛屽彧鏈夎繖涓▼搴忎細鍑虹幇鍗犵敤鍐呭瓨鏄疄闄呬嬌鐢ㄧ殑
: 璇烽棶涓轟粈涔堜細鍑虹幇榪欐牱鑾悕鍏跺澶氬崰鐢ㄥ唴瀛樼殑鎯呭喌鍛紵璋㈣阿澶у
榪欎釜鏃笉鏄簲鐢ㄦ湰韜殑bug錛屼篃涓嶆槸緋葷粺鐨刴emory leak銆?/p>
褰撳墠璧勬簮鐩戣鍣ㄤ腑鍏充簬緋葷粺鐗╃悊鍐呭瓨錛屾湁榪欎箞鍑犱釜緇熻欏癸紝鍙敤銆佺紦瀛樸佹繪暟銆佸凡瀹夎錛涘叾涓?緙撳瓨"榪欓」錛屼唬琛ㄧ潃宸茬敤浜庢枃浠剁郴緇熴佺綉緇滅瓑絳夊瓙緋葷粺鐨勬暟鎹紦鍐插瓨鍌ㄧ殑鍐呭瓨瀹歸噺錛屽叾涓寘鍚暟閲忓法澶х殑椹葷暀鍦ㄧ墿鐞嗗唴瀛樹腑鐨勬暟鎹〉闈€傝岃繖鏍風殑鐗╃悊鍐呭瓨娑堣楀茍娌℃湁褰掑叆浠諱綍涓涓繘紼嬪垪琛ㄦ樉紺虹殑榪涚▼鎵鍗犵敤鐨勭墿鐞嗗唴瀛樸傝繖灝辨槸涓轟粈涔堜笅闈㈠叕寮忥紝
榪涚▼鍒楄〃鏄劇ず鐨勬墍鏈夎繘紼嬫墍鍗犵敤鐨勭墿鐞嗗唴瀛樹箣鍜?+ 鍙敤鐗╃悊鍐呭瓨 < 鐗╃悊鍐呭瓨鎬繪暟
錛屾垚绔嬬殑鍘熷洜鎵鍦ㄣ?/p>
瀵艱嚧榪欎竴鐜拌薄鐨勫師鍥狅紝浠庤繖涓ぇ瑙勬ā璁$畻紼嬪簭鐨勮涓烘弿榪扮湅錛屽熀鏈彲浠ユ柇瀹氭槸鐢變簬浠ヤ笅涓ょ偣錛?br>1錛夊簲鐢ㄦ湰韜殑澶ц妯℃暟鎹┗鐣欑墿鐞嗗唴瀛橈紝瀵艱嚧parser.exe榪涚▼搴炲ぇ鐨剋orking set錛?br>2錛夊ぇ閲忛綣佺殑IO鎿嶄綔錛屽紩璧峰ぇ閲忕殑鐗╃悊鍐呭瓨涓虹郴緇熺紦瀛樻墍鍗犵敤錛?/p>
瀵逛簬1),蹇呴』娉ㄦ剰錛孏C.Collect()鍙槸璁劇疆浣胯兘鍨冨溇鏀墮泦鐨勬爣蹇椾綅錛屽茍娌℃湁绔嬪嵆鍚姩鍨冨溇鏀墮泦榪囩▼錛岃繖涓繃紼嬬殑瀹為檯鍚姩鏃跺埢鐢盋LR鏉ュ姩鎬佸喅璁紱
鎵浠ュ鏋滆鑾峰緱鍗蟲椂鐨勬墭綆″唴瀛樼殑閲婃斁錛屽茍榪涗竴姝ラ噴鏀劇墿鐞嗗唴瀛樹互鍑忓皬褰撳墠榪涚▼鐨剋orking set錛屽彲浠ヤ嬌鐢ˋppDomain榪欎釜.net涓嬪彲浠ョ敤鏉ヨ祫婧愬垝鍒嗐佽幏鍙栧拰閲婃斁鐨勶紝鍦ㄦ蹇典笂榪戜技浜庤交閲忕駭榪涚▼鐨勭紪紼嬭涔夛紱鍦ˋppDomain涓幏鍙栫殑鍚勭璧勬簮錛屽寘鎷墭綆″唴瀛樸佸姞杞藉叾涓殑鍚勪釜assembly浠ュ強CCW絳夛紝鍦ㄦAppDomain琚噴鏀炬椂閮借鐩稿簲鐨勫強鏃墮噴鏀撅紙鎴栬呭紩鐢ㄨ鏁伴掑噺錛夈?/p>
瀵逛簬2錛夛紝閲嶆柊瑙傚療鍏堝墠鐨勮璁″疄鐜板拰妯″瀷錛岃冭檻鏄惁鑳芥妸涓浜涘垎鏁g殑IO鎿嶄綔鍚堝茍璧鋒潵榪涜錛屾瘮濡?
for(long i=0; i < Count; ++i)
{
...
objIO.Operation(Data[i], 1);
...
}
淇敼涓?br>for(long i=0; i < Count; ++i)
{
...
...
}
objIO.Operation(Data, Count);
榪欐牱瀵逛簬鎻愰珮搴旂敤鐨処O鏁堢巼浠ュ強鎻愬崌緋葷粺緙撳瓨鍒╃敤鐜囧簲褰撲細鏈夊府鍔┿?/p>
瀵逛簬2錛夛紝緋葷粺緙撳瓨闅忕潃榪欎釜澶ц妯¤綆楀簲鐢ㄧ殑榪涜鑰岄愭澧炲ぇ錛屽茍鏈鍚庡鑷存暣涓郴緇熸棤娉曡幏鍙栫殑鐗╃悊鍐呭瓨鑰屾棤娉曠戶緇繍琛岀殑鐜拌薄錛屼及璁″嵆浣塊噰鐢ㄤ簡鍦ㄤ笂鏂囨彁鍑虹殑錛屽湪搴旂敤紼嬪簭浠g爜涓敖鍙兘鍚堝茍IO鎿嶄綔錛屽噺灝慖O嬈℃暟鐨勬柟娉曪紝涔熶笉浼氭敼鍠勭郴緇熺紦瀛樺崰鐢ㄧ墿鐞嗗唴瀛樻暟閲忚繃澶х殑闂銆傝繖涓棶棰樻湰璐ㄤ笂鏄疻indows鎿嶄綔緋葷粺鏈韓浠嶯T鏃朵唬鍒扮幇鍦紝涓鐩村瓨鍦ㄧ殑闂錛屼富瑕佹槸鍥寸粫鐫Windows kernel涓殑Cache mananger浠ュ強memory manager鏍稿績鎬佺粍浠剁殑瀹炵幇鏈哄埗鑰屼駭鐢熺殑銆?/p>
鏍規嵁鐩墠鐨凜c(瀵笴ache manager鐨勭畝縐幫紝鍦╓indowsResourceKernel寮婧愰」鐩腑錛孋ache manager鐩稿叧妯″潡鐨勫嚱鏁伴兘浠c浣滀負鍓嶇紑錛屾瘮濡侰cCopyRead錛孋cFlushCache絳夛紝Memory manager涔熷悓鏍風畝縐癕m)鐨勫疄鐜版満鍒訛紝鎵鏈夊鏂囦歡緋葷粺鐨勮闂紝鍖呮嫭鏈湴鍜岀綉緇滐紝閮戒細棣栧厛鐢盋c瀵圭浉鍏抽〉闈綔緙撳瓨鏄犲皠錛岄殢鐫棰戠箒鐨処O鐨勬搷浣滐紝琚獵c緙撳瓨鐨勯〉闈篃榪呴熼掑錛岃岃緙撳瓨欏甸潰鍗犵敤澶氬皯鐗╃悊鍐呭瓨錛岃繖鏄敱Windows kernel涓殑Memory manager鍐沖畾銆傜洰鍓嶅湪64浣嶅鉤鍙頒笂錛岀郴緇熺紦瀛樻渶楂樺彲杈?TB錛屾墍浠ヨ繖涓簲鐢ㄨ繘紼嬬殑榪愯涓嚭鐜板垎閰?G鐨勭紦瀛樻槸瀹屽叏鍙兘鐨勶紝浣嗗悓鏃墮棶棰樹篃闅忎箣鑰屾潵錛岄偅灝辨槸緋葷粺緙撳瓨鍗犵敤浜嗚繃澶氱殑鐗╃悊鍐呭瓨錛屽鑷村叾浠栬繘紼嬩互鍙婂唴鏍告湰韜棤娉曠敵璇瘋凍澶熺殑鐗╃悊鍐呭瓨錛屾渶鍚庤嚧浣跨郴緇?#8220;鍍墊”錛?/p>
瀵逛簬榪欎釜闂錛屽井杞彁渚涗簡“Microsoft Windows Dynamic Cache Service”宸ュ叿鏉ユ彁渚涘緋葷粺緙撳瓨鐨勫伐浣滈泦working set瀹歸噺錛堜篃灝辨槸椹葷暀鐗╃悊鍐呭瓨鐨勫ぇ灝忥級鐨勬帶鍒訛紝榪欎釜宸ュ叿涓昏鏄SetSystemFileCacheSize鐨勫皝瑁咃紝鍙互璁劇疆緋葷粺緙撳瓨瀹歸噺鐨勪笂涓嬮檺銆?/p>
浣嗚繖鍙槸涓縐嶄復鏃剁殑瑙e喅鏂規錛屽洜涓哄簲鐢ㄨ櫧鐒跺彲浠ラ氳繃涓婇潰榪欎釜Dynamic Cache Service鏉ヨ緗拰闄愬埗緋葷粺緙撳瓨瀹歸噺鐨勫ぇ灝忥紝浣嗘槸濡備綍紜畾緙撳瓨瀹歸噺澶у皬鐨勯潪甯稿洶闅撅紝濡傛灉榪囧皬錛屾墍鏈塈O鎬ц兘澶у彈褰卞搷錛屾暣涓狢c濡傚悓铏氳錛涘鏋滆繃澶?絳変環浜庝笉鍙楅檺)錛岄偅涔堢郴緇熺紦瀛樺崰鐢ㄨ繃澶氱墿鐞嗗唴瀛樺鑷寸郴緇熷兊姝葷殑鐜拌薄灝變細閲嶇幇銆?/p>
鎵浠ヤ粠鏍規湰涓婄湅錛岃繖涓棶棰樺簲鐢卞寘鎷珻c鍜孧m鍦ㄥ唴鐨勬暣涓猈indows kernel浣滃嚭瀹屾暣涓鑷寸殑璋冩暣錛屼絾浠庣洰鍓嶇殑瀹炵幇鐪嬭瀹屾垚鏁翠釜鏂規鏀瑰姩寰堝ぇ錛屾嵁縐拌繖涓敼榪涘彲鑳戒細鑰冭檻鍖呭惈鍦╓in7涓彂甯冦?/p>
Microsoft Windows Dynamic Cache Service涓嬭澆,
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e24ade0a-5efe-43c8-b9c3-5d0ecb2f39af&displaylang=en
Microsoft Windows Dynamic Cache Service鐩稿叧鐨勪粙緇嶏紝
http://blogs.msdn.com/b/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic-cache-service.aspx
棣栧厛錛屽唴鏍稿璞″彧鑳界敱鍦ㄥ唴鏍告佷笅鐨勪緥紼嬫墠鑳界洿鎺ヨ闂紝鍦ㄦ垜浠棩甯哥殑浠g爜涓紝鎵璋冪敤鐨刉indows API錛屾瘮濡侰reateFile, 錛堟敞鎰忚皟鐢ㄥ垰寮濮嬫椂鏄浜庣敤鎴鋒佷笅鐨勶級錛屼竴鑸兘浼氬湪ntdll.dll涓壘鍒板搴旂殑鍐呮牳鍑芥暟鎴栦緥紼嬶紝鎺ョ潃緋葷粺鍒囨崲鍒板唴鏍告侊紝寮濮嬭皟鐢ㄥ疄闄呭搴旂殑鍐呮牳鍑芥暟(KiCreateFile)錛岃繖涓椂鍊欐墠浼氬幓璁塊棶鍐呮牳瀵硅薄鐨勫疄闄呭湴鍧錛岀劧鍚庡緩绔嬩竴涓鍐呮牳瀵硅薄瀵瑰簲褰撳墠榪涚▼鐨凥andle錛屽茍鎶婂畠榪斿洖緇檆aller錛屽悓鏃跺垏鎹㈠洖鐢ㄦ埛鎬侊紱鍥犳錛屽浜庣敤鎴鋒佺▼搴忔潵璇達紝鍙涓斿彧鑳界煡閬撹鍐呮牳瀵硅薄鍦ㄥ綋鍓嶈繘紼嬩腑鐨勫搴旂殑Handle灝卞彲浠ュ鍏惰繘琛屾搷浣滀簡錛?/p>
鍏舵錛岃繖鏍風殑璁捐鏄嚭浜庡OS鏍稿績鏁版嵁緇撴瀯錛堝綋鐒跺寘鎷垜浠鍦ㄨ璁虹殑鍐呮牳瀵硅薄錛夌殑淇濇姢錛涘鏋滅敤鎴鋒佺▼搴忓彲浠ヨ交鏄撶殑鑾峰彇鍐呮牳鏁版嵁緇撴瀯鐨勫疄闄呭湴鍧錛岄偅涔堝浜庢暣涓狾S鐨勫畨鍏ㄥ拰紼沖畾鏄劇劧鏋勬垚寰堝ぇ鐨勯棶棰橈紱涓涓敤鎴鋒佺殑璇搷浣滃彲浠ヨ交鏄撶殑寮曡搗鏁翠釜OS鐨勫穿婧冿紝鑰屾湁浜嗚繖涓灞傜殑淇濇姢錛屽穿婧冪殑鍙槸褰撳墠榪涚▼鑰屼笉鏄暣涓郴緇燂紱
鎺ョ潃涓婇潰榪欑偣錛屼篃鍙互鐪嬪嚭錛屽唴鏍稿璞$殑濡傛璁捐杈懼埌浜嗘帴綰砄S鏈韓鐨勫鉤婊戞紨榪涚殑鐩殑銆備粠Windows 3.0鍒?5/98錛屼粠NT鍒癢in2k/XP錛屽啀鍒扮溂涓嬬殑Vista/Win7錛學indows鎿嶄綔緋葷粺鏈韓鍙戠敓浜嗗法澶х殑鍙樺寲鍜岃繘姝ワ紝閲囩撼浜嗘棤鏁扮殑鏂版妧鏈柊鏂規硶錛屼絾鏄畠鍩烘湰鐨勭郴緇熷簲鐢ㄧ紪紼嬫帴鍙o紝涔熷氨鏄垜浠墍鐔熺煡鐨剋indows API錛屽嵈騫舵病鏈夊彂鐢熷お澶х殑鏀瑰彉錛屽緢澶歐in 3.0 榪欎釜16浣峅S鏃朵唬鐨勭▼搴忎唬鐮佸彧瑕佸綋鍒濊璁¤鑼冪紪鐮佽鑼冿紝紼嶈淇敼灝卞彲浠ュ湪鏈鏂扮増鐨凮S涓婅繍琛屽椋烇紱鏄粈涔堝仛鍒頒簡榪欎簺錛熶篃灝辨槸鎵璋撶殑鏋佷負閲嶈鐨勫悜鍚庡吋瀹規э紝鎴戜釜浜鴻涓猴紝鎶婃搷浣滅郴緇熺殑閲嶈/涓昏鍔熻兘鎶借薄鎴愬唴鏍稿璞★紝騫墮氳繃涓濂楁瀬涓簊olid鐨凙PI鏆撮湶鍑烘潵錛岃揪鎴愪簡榪欎釜鐩爣銆?/p>
榪欐槸涓縐嶆洿楂樺眰嬈′笂鐨勯潰鍚戝璞★紝鎶婂疄鐜扮殑緇嗚妭錛屾妸緋葷粺鐨勫鏉傦紝綆鍗曡屼紭闆呯殑灝佽浜嗚搗鏉ャ備綘鍙璋冪敤CreateFile鍘誨緩涓枃浠舵垨綆¢亾鎴栭偖妲斤紝涓嶇敤鎷呭績褰撳墠OS鏄疻indows 3.0榪樻槸Win7錛岃幏寰楃殑Handle錛屼綘涔熶笉鐢ㄥ幓鍏沖績瀹冧互鍙婂畠鎵鎸囧悜鐨勫唴鏍稿璞℃槸Windows 3.0鐨勫疄鐜拌繕鏄疻in7鐨勫疄鐜般?/p>
Windows涓婃墍鏈夌殑綺懼僵鍑犱箮閮芥槸鍩轟簬榪欏閫氳繃鍐呮牳瀵硅薄姒傚康鎶借薄騫舵毚闇茬殑API鍩虹涔嬩笂錛孋OM/OLE錛岃繖涓簩鍗佸勾鍓嶉渿鎾兼х殑ABI鍜孖PC鑼冪暣鐨勬妧鏈鑼冿紝鍏朵腑寰堝鐨勮璁℃濊礬涔熸槸妞嶆牴浜庡唴鏍稿璞$殑璁捐鐞嗗康錛屽COM瀵硅薄鐨勫紩鐢ㄨ鏁板拰鍐呮牳瀵硅薄寮曠敤璁℃暟錛孖Unknown鍜學indows Handle(鍓嶈呮槸鎸囧悜鏌愪釜浜岃繘鍒跺吋瀹圭殑緇勪歡瀵硅薄錛屽悗鑰呭紩鐢ㄦ垨闂存帴鎸囧悜鏌愪釜鍐呮牳瀵硅薄錛岄兘鏄浜庢煇涓鏉傛蹇電殑涓鑷存ф娊璞¤〃榪?錛岀瓑絳夛紱
鍗佸勾鍓嶇殑.net錛屾湰鏉ユ槸浣滀負COM鐨勫崌綰х増鏈帹鍑猴紝鎶奀OM/OLE鐨勫疄鐜板鏉傛у皝瑁呭湪浜嗚櫄鎷熸満騫沖彴CLR閲岄潰錛岃屼粠榪欎釜铏氭嫙鏈虹殑寮婧愬疄鐜癝SCLI錛屾垜浠彲浠ョ湅鍒板ぇ閲忕殑COM鏈哄埗鍦?net鐨勫叿浣撳疄鐜伴噷闈㈣搗浜嗕婦瓚寵交閲嶇殑浣滅敤銆傚湪榪欎簺VM涓ぇ閲弒ymbol鏈夌潃COR鐨勫墠緙鎴栬呭悗緙錛孋OR鎸囦唬浠涔堬紵Common Object Runtime, 鍘熸潵CLR/SSCLI鐨勮璁℃濊礬涔熸槸鎶奜S閫氳繃铏氭嫙鏈篤M鐨勫艦寮忥紝騫墮氳繃common object鍚戝簲鐢ㄧ▼搴忔毚闇插姛鑳姐?/p>
灝忕粨涓涓嬶紝
OS鍐呮牳瀵硅薄API錛屼笁鍗佸勾鍓嶇郴緇熺駭鍒殑瀵硅薄鎶借薄錛?br>COM/OLE錛屼簩鍗佸勾鍓嶄簩榪涘埗緇勪歡綰у埆鐨勫璞℃娊璞★紱
.net/CLR, 鍗佸勾鍓嶈櫄鎷熸満騫沖彴綰у埆鐨勫璞℃娊璞★紱
鍐欏埌榪欓噷鍊掓槸寮曡搗浜嗘垜鍏朵粬鐨勪竴浜涙濊冿紝杞歡宸ヤ笟鐣屼竴鐩翠互鏉ュ闈㈠悜瀵硅薄OO鏄儹鐏湞澶╋紝鐗瑰埆鏄璦灞傞潰錛屼粠C++/Java/C#鍒癙ython/JScript錛屼笉涓鑰岃凍錛?/p>
浣嗘槸鎴戜滑鏈夋病鏈変粠鏍規湰鎬х殑璁捐鐞嗗康涓婂闈㈠悜瀵硅薄錛屽療綰抽泤璦浜嗗憿錛?/p>
濡傛灉鐜板湪璁捐Windows榪欏API鐨勪換鍔℃斁鍦ㄥぇ瀹墮潰鍓嶏紝浼氶噰鐢ㄥ唴鏍稿璞?Handle鏂規榪樻槸鐩存帴鎸囧悜OS鍐呴儴鏁版嵁緇撴瀯鐨勬柟寮忔潵鏆撮湶鍔熻兘錛?/p>
浠庝笁鍗佸勾鍓嶇殑榪欏API鐨勮璁′腑錛屾垜浠湡鐨勫彲浠ュ鍒板緢澶氥?/p>