锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鏈枃鍩轟簬 Visual Studio 2005 鐨勯鍙戝竷鐗堟湰銆傛枃涓寘鍚殑鎵鏈変俊鎭潎鏈夊彲鑳藉彉鏇淬?/p> 鏈枃璁ㄨ錛? 鍒嗘瀽鍣ㄧ殑鍐呴儴宸ヤ綔鏂瑰紡 EPT 鐨勭伒媧誨姛鑳? 涓涓緵鍒嗘瀽鐨勭ず渚嬪簲鐢ㄧ▼搴?/p> 浠g爜鍙粠浠ヤ笅浣嶇疆涓嬭澆錛?/b> 蹇熶唬鐮佷粛鐒跺緢鍙楁榪庛傚嵆浣挎垜鐢ㄦ潵閿叆鏈枃鐨勮綆楁満鍏鋒湁瓚沖鐨勮兘鍔涘拰鍐呭瓨錛岃兘澶熷悓鏃舵帶鍒朵竴搴у師瀛愯兘鍙戠數鍘傘佷竴涓伀鏄熸極娓歌鍒掍互鍙婄編鍥借タ閮ㄤ笂絀虹殑絀轟腑浜ら氾紝騫朵笖浠嶇劧鍏鋒湁鍏呰凍鐨勮兘鍔涙潵澶勭悊鏄熼檯鎺㈢儲涓殑 SETI 鏁版嵁鍖咃紝浣嗚繖騫朵笉鎰忓懗鐫寮鍙戜漢鍛樹笉鍐嶉渶瑕佹媴蹇冨叾浠g爜鐨勯熷害鍜屾晥鐜囥傚湪榪囧幓榪涜 Win32廬 鏈満寮鍙戠殑鏃ュ瓙閲岋紝鎴戜滑涓嶄粎闇瑕佹媴蹇冮熷害錛岃屼笖榪樿鎷呭績 PC 騫沖彴涓婇偅浜涗護浜鴻鍘岀殑璁塊棶鍐茬獊錛堝浜庝綘浠繖浜涜佸浼欙紝榪樻湁鈥滃叏灞淇濇姢閿欒鈥濆拰鈥滀笉鍙仮澶嶇殑搴旂敤紼嬪簭閿欒鈥濓級銆傚敖綆℃墭綆′唬鐮佸凡緇忔秷闄や簡鍏朵腑鐨勪竴浜涙媴蹇冿紝浣嗗畠鍙剰鍛崇潃鎮ㄦ墍緇忓巻鐨勯偅浜涙ц兘闂鍙兘姣斾互鍓嶆洿鍔犻毦浠ユ崏鎽搞備富瑕佸師鍥犳槸錛屽湪浣跨敤鎵樼浠g爜鏃訛紝鎴戜滑涓嶅叿鏈夊湪榪涜鏈満寮鍙戞椂鎵鎷ユ湁鐨勭畝渚跨殑榪愯搴撹鍥俱?/p> 鏈夎澶氭錛屽綋鎴戞鍦ㄤ嬌鐢ㄥ鎴風鏃訛紝鎴戜笉鐭ラ亾濡備綍瑙e喅鎭舵х殑鎬ц兘闂銆傚綋鐒訛紝榪欎簺鎬ц兘闂涓嶄細鍑虹幇鍦ㄤ換浣曟祴璇曠郴緇熶腑錛涘畠浠彧浼氬嚭鐜板湪鐪熷疄涓栫晫鐨勭敓浜т腑銆傜敱浜庡叕鍏辮璦榪愯搴?(CLR) 鏄粦鐩掞紝鍥犳濡傛灉鎴戝笇鏈涙壘鍒板湪嫻嬭瘯緋葷粺涓噸澶嶆ц兘闂鐨勬柟娉曪紝鍒欏緢闅鵑嫻嬩細鍙戠敓浠涔堜簨鎯呫傚敖綆″湪甯傚満涓湁涓浜涚涓夋柟鍟嗕笟鎬ц兘宸ュ叿錛屼絾榪欎簺宸ュ叿涓殑澶у鏁伴兘浼氬緋葷粺閫犳垚榪囧鐨勫共鎵幫紝浠ヨ嚦浜庢牴鏈笉鑳借冭檻鍦ㄧ敓浜х郴緇熶腑浣跨敤銆傝繖涔熷氨鏄綋鎴戠湅鍒?Microsoft 灝嗘彁渚涗竴涓叏鏂扮殑鍒嗘瀽鍣?鈥?Enterprise Performance Tool (EPT) 浠ヤ綔涓?Visual Studio廬 2005 Team Developer Edition 鐨勪竴閮ㄥ垎鏃訛紝鎰熷埌濡傛鍏村鐨勫師鍥犮傚畠鏄垜鍙互鐪熸鑰冭檻鍦ㄧ敓浜х郴緇熶腑浣跨敤鐨勭涓涓垎鏋愮郴緇燂紝鍥犱負瀹冩彁渚涗簡涓浜涢潪甯歌交渚跨殑鏀墮泦鎬ц兘鏁版嵁鐨勬墜孌點傚洜涓烘垜鏇劇粡棰嗗榪囦竴縐嶆渶鐣呴攢鐨勫晢涓氬垎鏋愬櫒鐨勫紑鍙戝伐浣滐紝鎵浠ユ垜鑳藉鐞嗚В鍦ㄤ笉浜х敓澶緋葷粺寮閿鐨勬儏鍐典笅鏀墮泦鏈夌敤鍒嗘瀽鏁版嵁鐨勫洶闅劇▼搴︺?/p> 鍦ㄦ湰鏂囦腑錛屾垜灝嗕粙緇?EPT 鐨勫熀鏈師鐞嗭紝騫跺悜鎮ㄨ鏄庡浣曞紑濮嬩嬌鐢ㄥ畠銆傚洜涓哄垎鏋愬櫒鎵鍏鋒湁鐨勫鏉傛э紝鎵浠ュ湪灝嗘潵鏌愪竴鏈熶腑錛屾垜灝嗚璁哄浣曚嬌鐢?EPT 鏉ヨ窡韙偍鍙兘鍦ㄥ悓浜嬬殑浠g爜涓亣鍒扮殑瀹為檯鎬ц兘闂錛堟垜鐭ラ亾鎮ㄧ殑浠g爜闈炲父瀹岀編錛侊級銆傝璁頒綇錛孍PT 姝e鍦ㄦ祴璇曢樁孌碉紙鎴戜嬌鐢ㄧ殑鏄?Burton Beta 1 鍒鋒柊浣嶇増鏈?40607.83錛夛紝騫朵笖鍦ㄨ浜у搧鍙戝竷涔嬪墠錛屽彲鑳戒細瀵?UI 鎴栨煇浜涚壒瀹氭楠よ繘琛屾洿鏀廣傚湪瀵?EPT 榪涜浠嬬粛涔嬪墠錛屾垜甯屾湜鑺辯偣鍎挎椂闂磋皥璁轟竴涓嬪垎鏋愬櫒閫氬父鏄浣曞伐浣滅殑錛屼互渚挎偍鍙互鏇村ソ鍦頒簡瑙f槸浠涔堜嬌 Enterprise Performance Tool 鍙樺緱濡傛涓庝紬涓嶅悓銆?/p> 鍦ㄦ偍緙栧啓鍒嗘瀽鍣ㄦ椂錛屽彲浠ラ夋嫨涓ょ鏀墮泦鏁版嵁鐨勬柟寮忎腑鐨勪竴縐嶏細鎺㈡祴鍜岄噰鏍楓傝繖涓ょ鏂瑰紡閮藉崄鍒嗘湁鏁堬紝浣嗘槸姣忕鏂瑰紡閮芥湁瀹冪殑鎶樿》鏂規銆傛帰嫻嬪垎鏋愬櫒鏀墮泦鏁版嵁鐨勬柟寮忔槸鍦ㄥ簲鐢ㄧ▼搴忎腑鎻掑叆鎺㈡祴鎴栨寕閽╋紝浠ヤ究鍦ㄧ▼搴忔墽琛岃鎸傞挬鏃跺氨璋冪敤鍒嗘瀽鍣ㄨ繍琛屽簱銆傝鏀劇疆鎺㈡祴錛屽垎鏋愬櫒闇瑕佸湪緙栬瘧姝ラ涓皢搴旂敤紼嬪簭浠〃鍖栵紝閲嶅啓宸茬粡緙栬瘧鐨勪簩榪涘埗鏂囦歡錛屾垨鑰呭嵆鏃跺皢搴旂敤紼嬪簭浠〃鍖栥傝鏌ョ湅鍩轟簬 .NET 鐨勫簲鐢ㄧ▼搴忕殑鎺㈡祴鍒嗘瀽鍣ㄦ柟娉曠ず渚嬶紝璇烽槄璇?Aleksandr Mikunov 鐨勪竴綃囬潪甯稿嚭鑹茬殑鏂囩珷 鈥斺?a target="_blank">Rewrite MSIL Code On the Fly with the .NET Framework Profiling API鈥濓紙璇ユ枃绔犳憳鑷?MSDN廬Magazine 2003 騫?9 鏈堝垔錛夈傚綋鎴戝紑濮嬭璁?EPT 鐨勬椂鍊欙紝鎮ㄥ皢鐪嬪埌瀹冧嬌鐢ㄦ湳璇滀華琛ㄥ寲鈥濇潵琛ㄧず鎺㈡祴鏂規硶銆?/p> 鎺㈡祴鍒嗘瀽鍣ㄦ柟娉曠殑涓昏浼樺娍鍦ㄤ簬錛屽綋搴旂敤紼嬪簭鎵ц鏃訛紝灝嗗緇堣皟鐢ㄦ墍鎻掑叆鐨勬帰嫻嬨傝繖鏍鳳紝鍒嗘瀽鍣ㄨ繍琛屽簱灝嗗榪愯鍏鋒湁瀹屾暣鐨勮璇嗭紝鍥犳鍦ㄧ敓鎴愬叧閿俊鎭紙渚嬪錛屽嚱鏁頒箣闂寸殑鐖跺瓙鍏崇郴錛夋椂鍙互紜繚姝g‘錛屽茍涓斿垎鏋愬櫒鍙互鎶ュ憡瀹岀編鐨勮皟鐢ㄦ爲錛屼互渚挎偍鍙互杞繪澗鎵懼埌鑺辮垂鏈闀挎椂闂寸殑璋冪敤璺緞銆備嬌鐢ㄦ帰嫻嬪垎鏋愬櫒鏃訛紝娌℃湁浠涔堜簨鎯呰兘澶熼樆姝㈠紑鍙戜漢鍛樺彧鍦ㄥ嚱鏁板叆鍙e拰鍑哄彛澶勬彃鍏ユ帰嫻嬨傚彲浠ュ湪婧愪唬鐮佽綰у埆鏀劇疆棰濆鐨勬帰嫻嬶紝浠ヤ究鎮ㄥ鍑芥暟鍏鋒湁瀹屾暣鐨勮璇嗐?/p> 浣嗘槸錛屾帰嫻嬪垎鏋愬櫒鎵鎻愪緵鐨勮緇嗚鍥懼叿鏈変竴浜涚己鐐廣傜涓涓己鐐規槸浠〃鍖栨柟妗堜嬌鐢ㄨ搗鏉ュ彲鑳藉緢楹葷儲錛屽茍涓斿洜涓哄畠鏄湪浜岃繘鍒剁駭鍒噸鍐欙紝鍥犳瀛樺湪寰堝鍙兘寮曞叆娼滃湪閿欒鐨勯鍩熴傛濡傛偍鍙互鎯沖儚鍒扮殑閭f牱錛岃繖浜涙帰嫻嬭繕鍗犵敤浜嗙┖闂達紝浠庤屽鑷翠竴浜涗唬鐮佽啫鑳鍜岃緝浣庣殑鎬ц兘銆傚浜庡畬鍏ㄤ華琛ㄥ寲鐨勫簲鐢ㄧ▼搴忥紝鎺㈡祴鍒嗘瀽鍣ㄥ彲鑳戒細瀵艱嚧閫熷害澶у箙搴︿笅闄嶏紝浠ヨ嚦浜庡嚑涔庝笉鍙兘鍦ㄧ敓浜х郴緇熶笂榪愯浠〃鍖栫殑浜岃繘鍒舵枃浠訛紝浠庤屼嬌鎮ㄥ湪鏈闇瑕佽鍒嗘瀽鍣ㄧ殑鏃跺欏嵈鏃犳硶鍒╃敤瀹冦?/p> 姝e鍏跺悕縐版墍鏆楃ず鐨勯偅鏍鳳紝閲囨牱鍒嗘瀽鍣ㄦ寜鐓ч鍏堝畾涔夌殑鏃墮棿闂撮殧鑾峰緱搴旂敤紼嬪簭涓鍦ㄦ墽琛岀殑鎿嶄綔鐨勫揩鐓с傚ぇ澶氭暟寮鍙戜漢鍛橀兘娌℃湁鎰忚瘑鍒?Microsoft 鎬繪槸鍦ㄤ粬浠殑寮鍙戠幆澧冧腑闅忛檮浜嗕竴涓噰鏍峰垎鏋愬櫒銆傚畠琚О涓鴻皟璇曞櫒錛?濡傛灉鎮ㄥ紑濮嬭皟璇曞簲鐢ㄧ▼搴忥紝騫朵笖姣忛殧 30 縐掑乏鍙沖氨涓柇鑷寵皟璇曞櫒錛屽垯鎮ㄥ彲浠ユ敞鎰忓埌搴旂敤紼嬪簭綰跨▼姝e湪浣曞鎵ц錛屼互渚垮緢濂藉湴浜嗚В搴旂敤紼嬪簭鍦ㄤ竴嬈¤繍琛岃繃紼嬩腑鎵ц浜嗗摢浜涙搷浣溿傛垜宸茬粡閫氳繃鎵嬪姩瀹屾垚閲囨牱鍒嗘瀽鍣ㄧ殑宸ヤ綔錛岃В鍐充簡寰堝鐢熶駭鎬ц兘闂銆?/p> 浣塊噰鏍峰垎鏋愬櫒濡傛鏈変環鍊肩殑鍘熷洜鍦ㄤ簬錛屽畠浠叿鏈夋瘮鎺㈡祴鍒嗘瀽鍣ㄥ皬寰楀鐨勭郴緇熷紑閿銆傝繖鎰忓懗鐫錛屾偍鍙互鏈夋洿楂樼殑鏈轟細鍦ㄧ敓浜х郴緇熶腑浣跨敤瀹冧滑錛岃屼笉浼氫嬌鏈嶅姟鍣ㄧ柌浜庡鍛戒互鑷充簬鍋滄満銆傞噰鏍峰垎鏋愬櫒鐨勯棶棰樺湪浜庯紝浠庡簲鐢ㄧ▼搴忎腑鑾峰緱鐨勬墍鏈夋牱鏈緢鏈夊彲鑳芥牴鏈笉鏄劇ず浠諱綍浠g爜銆備緥濡傦紝濡傛灉鎮ㄥ叿鏈夊ぇ閲忎嬌鐢ㄦ暟鎹簱鐨勫簲鐢ㄧ▼搴忥紝鍒欐墍鏈夋牱鏈兘鍙互鏉ヨ嚜鏁版嵁搴撹闂▼搴忛泦鐨勫唴閮ㄣ傛渶鍚庯紝鍙姄鍙栨瘡涓嚎紼嬬殑褰撳墠鎵ц鎸囦護鐨勪紶緇熼噰鏍峰垎鏋愬櫒浼氫嬌寰楃‘瀹氭柟娉曚箣闂寸殑鐖跺瓙鍏崇郴鍙樺緱鍗佸垎鍥伴毦錛屽洜鑰岀‘瀹氭ц兘鏈宸殑鎵ц浠g爜閫斿緞瑕佸洶闅懼緱澶氥?/p> 鍦ㄤ簡瑙e垎鏋愬櫒鐨勬搷浣滄柟寮忎箣鍚庯紝鎴戝氨鍙互璁ㄨ EPT 鎵閲囧彇鐨勬柟寮忎簡銆傜畝鍗曞湴璇達細瀹冩棦鏄噰鏍峰垎鏋愬櫒錛屽張鏄帰嫻嬪垎鏋愬櫒錛圡icrosoft 縐頒箣涓衡滀華琛ㄥ寲鈥濓級銆傚叾鎬濇兂鏄紝鎮ㄥ湪寮濮嬫椂灝嗛氳繃閲囨牱鍒嗘瀽鍣ㄦ潵鏌ョ湅搴旂敤紼嬪簭鎬ц兘錛屼互鑾峰緱甯歌鎬ц兘鐗瑰緛錛屼互渚挎偍鍙互寮濮嬪皢娉ㄦ剰鍔涢泦涓簬搴旂敤紼嬪簭鐨勭儹鐐歸棶棰樹笂銆傚湪鎮ㄤ簡瑙e叿鏈変竴浜涢棶棰樼殑紼嬪簭闆嗕箣鍚庯紝灝卞彲浠ユ眰鍔╀簬浠〃鍖栧垎鏋愪互鏌ョ湅鐗瑰畾鐨勯棶棰橀鍩燂紝浠ヤ究淇瀹冧滑銆傚綋鐒訛紝濡傛灉鎮ㄨ鎵ц鍗曞厓鎬ц兘嫻嬭瘯錛屽垯娌℃湁浠涔堣兘澶熼樆姝㈡偍鐩存帴杞埌瀵圭壒瀹氭ā鍧楄繘琛屼華琛ㄥ寲錛屼互渚垮湪鑱氱劍鏂規涓煡鐪嬪畠浠殑鎬ц兘銆?/p> 浣?EPT 閲囨牱鍒嗘瀽鍣ㄦ湁瓚g殑閮ㄥ垎鍘熷洜鍦ㄤ簬錛屾偍鍙互浣跨敤澶ч噺欏圭洰鏉ヨЕ鍙戞牱鏈傞粯璁ょ殑閲囨牱鐐規槸鏃墮挓鍛ㄦ湡錛屽茍涓斿彲鑳芥槸鎮ㄦ繪槸浣跨敤鐨勯噰鏍風偣銆傞粯璁ゆ儏鍐典笅錛屾瘡涓鐧句竾涓椂閽熷懆鏈熼噰鏍蜂竴嬈★紝浣嗘槸鎮ㄥ彲浠ュ皢閲囨牱闂撮殧鐨勬椂閽熷懆鏈熸暟鏇存敼涓烘偍鍠滄鐨勪換浣曞鹼紝鍙槸璇ュ艱秺灝忥紝EPT 鎵瀵艱嚧鐨勭郴緇熷紑閿灝辮秺澶с傚浜庣敓浜ф湇鍔″櫒錛屾偍鍙互灝嗚鏁板瓧璁劇疆涓烘煇涓潪甯擱珮鐨勬暟瀛楋紙濡備簲鐧句竾錛夛紝浠ヤ嬌緋葷粺寮閿淇濇寔鍦ㄥ悎鐞嗙殑姘村鉤錛屽悓鏃朵笉浼氬畬鍏ㄧ牬鍧忚繘紼嬩腑鐨勫彲鐢ㄦс傛濡傛偍棰勬枡鐨勯偅鏍鳳紝姣忎簲鐧句竾涓椂閽熷懆鏈熼噰鏍蜂竴嬈″皢鎰忓懗鐫鎮ㄩ渶瑕佷嬌搴旂敤紼嬪簭榪愯鐩稿綋闀跨殑鏃墮棿錛屼互渚垮湪鎮ㄧ殑鐑偣鍖哄煙涓幏寰楄壇濂界殑鏍鋒湰鍒嗗竷銆?/p> 濡傛灉鎮ㄧ殑搴旂敤紼嬪簭浣跨敤浜嗗緢澶氬唴瀛橈紝鍒欏彲浠ラ夋嫨璁?EPT 閲囨牱鍒嗘瀽鍣ㄦ敼涓哄湪鍑虹幇欏甸敊璇椂瑙﹀彂銆傝繖鏍鳳紝鎮ㄥ氨鍙互鍦ㄦ暟鎹浜ゆ崲鍑?RAM 鏃惰幏寰楁ц兘蹇収錛屽茍涓斿彲浠ョ湅鍒版槸璋佸湪鎵ц鎺ㄩ佹搷浣溿傚鏋滃垵濮嬪垎鏋愬櫒榪愯琛ㄦ槑鎮ㄥ湪浠g爜澶栭儴鐨勫尯鍩熶腑鑺辮垂浜嗗ぇ閲忔椂闂達紝鍒欏彲浠ュ憡璇夊垎鏋愬櫒鏀逛負鍩轟簬緋葷粺璋冪敤鏉ュ畬鎴愰噰鏍楓傚鏋滄偍瑕佸垎鏋愬叿鏈夊ぇ閲忕嚎紼嬬殑澶氱嚎紼嬪簲鐢ㄧ▼搴忥紝鍒欒閲囨牱緇熻淇℃伅浼氬鎮ㄥ湪浠庣敤鎴鋒ā寮忚漿鎹㈠埌鍐呮牳妯″紡錛堣繖琛ㄦ槑鏌愪簺綰跨▼鍙兘浼氫笉蹇呰鍦板湪鍐呮牳瀵硅薄涓婇樆濉烇級鏃剁殑鏁版嵁榪涜鎷嶇収銆傛偍鍙互鐢ㄤ簬閲囨牱瑙﹀彂鍣ㄧ殑鏈鍚庝竴浜涘兼槸 CPU 鎵鏀寔鐨勫悇縐嶆ц兘璁℃暟鍣紝渚嬪錛屽垎鏀鏁版垨緙撳瓨涓㈠け銆傝繖鏄竴涓彧鏈夋瀬灝戞暟浜烘墠紜疄闇瑕佺殑楂樼駭閫夐」錛屼絾鏄鏋滄偍紜疄闇瑕佽鏁版嵁錛岄偅涔堢煡閬撹鏁版嵁瀛樺湪涔熶笉閿欍?/p> 閭d簺蹇欑鐨?Redmontonian 榪樿В鍐充簡璋冪敤鍫嗘爤闂 鈥?榪欐槸瀵規湁鐢ㄧ殑閲囨牱鍒嗘瀽鍣ㄩ犳垚闅滅鐨勬渶澶ч棶棰樹箣涓銆傛濡傛垜鍦ㄥ墠闈㈡彁鍒扮殑閭f牱錛屽ぇ澶氭暟閲囨牱鍒嗘瀽鍣ㄥ湪閲囨牱鏃跺彧鏄褰撳墠姝e湪鎵ц鐨勬寚浠よ繘琛屾媿鐓с侻icrosoft 瑙e喅浜嗗浣曞皢鏋佸揩鐨勫爢鏍堥亶鍘嗙粨鍚堝埌浠栦滑鐨勯噰鏍峰垎鏋愬櫒閮ㄥ垎涓紝浠ヤ究鎮ㄨ兘澶熻幏寰楁牱鏈殑濂藉錛屽茍涓旂煡閬撳湪鎵ц璇ユ牱鏈椂鏄浣曞埌杈鵑偅閲岀殑銆傝繖浣垮緱灝嗚繖浜涘揩鐓т笌浠g爜閲嶆柊鍏寵仈鍙樺緱鏇村姞瀹規槗銆?/p> 鍦ㄨ璁烘偍鍙互鍒嗘瀽鐨勫簲鐢ㄧ▼搴忎箣鍓嶏紝鎴戞兂鎻愬嚑浠舵偍寰堝彲鑳借寰楁湁瓚g殑浜嬫儏銆傜涓浠朵簨鎯呮槸錛屽鏋滄偍璁や負 Microsoft 鏄粠澶村紑鍙戣鎬ц兘宸ュ叿鐨勶紝閭d箞鎮ㄥ彧鐚滃浜嗕竴鍗娿傚湪 Microsoft 鍐呴儴錛屽紑鍙戝洟闃熶竴鐩村湪浣跨敤 EPT 鐨勫墠韜紙鍚嶄負 Call Attribute Profiler (CAP)錛屽畠浣跨敤浠〃鍖栵級鍜?Low Overhead Profiler (LOP) 鈥?涓涓噰鏍峰垎鏋愬櫒銆傜敱浜?Microsoft 寮鍙戜簡榪欎簺宸ュ叿浠ユ敹闆嗘湁鍏沖簲鐢ㄧ▼搴忥紙渚嬪錛屾搷浣滅郴緇熷拰鏁翠釜 Office 濂椾歡錛夌殑鎬ц兘淇℃伅錛屽洜姝ゅ畠浠敋鑷充笉浼氱粰鎮ㄧ殑搴旂敤紼嬪簭甯︽潵浠涔堣礋鎷呫傛垜鏇劇粡浣跨敤榪?EPT 鐨勫墠韜紝鎵浠ユ垜鍙互鍛婅瘔鎮ㄥ叕鍏辯増鏈嬌鐢ㄨ搗鏉ヤ細瀹規槗澶氬皯銆傛澶栵紝瀹冧滑榪樺叿鏈変竴浜涙瀬涓烘湁瓚g殑鍔熻兘錛堢◢鍚庢垜灝嗕簣浠ヨ璁猴級銆?/p> 絎簩涓湁瓚g殑浜嬮」涓?EPT 鎵鏀寔鐨勬妧鏈湁鍏熾傚敖綆℃煇浜涗漢鍙兘璁や負鐢變簬 Microsoft 闈炲父鍋忛噸浜?.NET Framework錛屽洜姝ゆ棤娉曞皢 EPT 鐢ㄤ簬 Win32 搴旂敤紼嬪簭鎴栨湰鏈轟唬鐮侊紝浣?EPT 鍥㈤槦瀹為檯涓婂凡緇忔壙璇烘敮鎸佹墍鏈夌殑 Win32 鏈満搴旂敤紼嬪簭浠ュ強 .NET 浠g爜銆傝繖鎰忓懗鐫錛屾棤璁烘偍浣跨敤鍝鎶鏈紙ASP.NET銆乄indows廬 紿椾綋銆丮FC 鎴?Win32 鏈嶅姟錛夛紝鎮ㄩ兘鍏鋒湁瀹屽叏鐨勯噰鏍峰拰浠〃鍖栨敮鎸併傛偍灝嗙湅鍒幫紝鍦?Visual Studio .NET 涓紝璺ㄦ妧鏈嬌鐢?EPT 娌℃湁浠諱綍宸紓銆?/p> 瀹為檯鐨?EPT 璁劇疆闈炲父騫沖父錛涘彧闇浠?Visual Studio .NET 瀹夎紼嬪簭鐨勨淓nterprise Tools鈥濇爲鎺т歡涓夋嫨鈥淓nterprise Performance Tool鈥濆嵆鍙傚綋鐒訛紝鍥犱負鎮ㄧ煡閬?EPT 浠嶇劧鏄竴涓祴璇曚駭鍝侊紝鎵浠ユ偍鐨勭涓涓弽搴斿彲鑳芥槸榪愯铏氭嫙 PC錛屽茍鍦ㄩ偅閲屽畨鍏ㄥ湴鍖呭惈鎵鏈夊唴瀹廣備絾鏄紝涓轟簡鎵ц閲囨牱鍒嗘瀽錛孍PT 浣跨敤鍐呮牳妯″紡璁懼椹卞姩紼嬪簭鏉ュ搷搴?CPU 鎬ц兘璁℃暟鍣ㄤ腑鏂紝涓嶈繃浠や漢閬楁喚鐨勬槸錛岃櫄鎷?PC 娌℃湁瀹炵幇璁℃暟鍣ㄣ傚畠涔熸病鏈夋ā鎷熼珮綰у彲緙栫▼涓柇鎺у埗鍣?(APIC)錛岃岃繖涓よ呴兘鏄唴鏍歌澶囬┍鍔ㄧ▼搴忓畬鎴愬叾宸ヤ綔鎵蹇呴渶鐨勩傚ソ娑堟伅鏄紝濡傛灉鎮ㄦ病鏈夐澶栫殑璁$畻鏈轟互渚垮畨瑁?EPT錛岄偅涔堟偍涔熷茍闈炲畬鍏ㄤ笉騫革紝鍥犱負浠〃鍒嗘瀽鍣ㄤ粛鐒惰兘澶熷伐浣溿傚鏋滄偍娌℃湁澶氫綑鐨勮綆楁満浠ヤ究瀹夎 EPT錛岄偅涔堣繖鏄竴涓鍏徃涓烘偍璐拱鍙︿竴鍙拌綆楁満鐨勫ソ鍊熷彛銆?/p> 瑕佸涔犱換浣曞伐鍏風殑鐢ㄦ硶錛屾偍閮介渶瑕佷竴涓悎閫傜殑紺轟緥搴旂敤紼嬪簭錛屼互渚胯兘澶熸渶浣沖湴鍒╃敤璇ュ伐鍏楓傚湪嫻嬭瘯鍛ㄦ湡鐨勮繖涓鏃跺埢錛孍PT 娌℃湁闅忛檮浠諱綍紺轟緥錛屼絾鏄湪鎴戠殑紜洏涓婂凡緇忔湁浜嗕竴涓畬緹庣殑鍒嗘瀽鍣ㄧず渚嬨傛棭浜涙椂鍊欙紝鎴戞鍦ㄥ皾璇曡В鍐沖浣曞湪 Windows 紿椾綋搴旂敤紼嬪簭涓嬌鐢ㄥ綰跨▼鐨勯棶棰橈紝鍥犳鎴戠紪鍐欎簡涓涓悕涓?Animated Algorithm 鐨勪簡涓嶈搗鐨勫皬紼嬪簭錛岃紼嬪簭鍙疄鏃舵縺媧誨ぇ閲忔帓搴忕畻娉曘?b>鍥?1 鏄劇ず鎴戠殑紺轟緥搴旂敤紼嬪簭宸茬粡鍑嗗濂芥帓搴忋?/p> 鍥?1 姝e湪宸ヤ綔鐨?Animated Algorithm Animated Algorithm 浣挎偍鍙互鍦ㄧ獥浣撶殑緇勫悎妗嗕腑錛屼粠 15 涓笉鍚岀殑鎺掑簭綆楁硶涓繘琛岄夋嫨銆傗淥ptions鈥濊彍鍗曚嬌鎮ㄥ彲浠ラ夋嫨鍚勪釜鍏冪礌浜ゆ崲鎴栬緗箣闂寸殑浼戠湢鏃墮棿錛屼互渚挎偍鍙互闄嶄綆鍥懼艦鏇存柊鐨勯熷害銆?/p> 鎴戜笉涔呭墠浣跨敤 Microsoft廬 .NET Framework 鐗堟湰 1.1 緙栧啓浜?Animated Algorithm錛屽洜姝ゆ偍涓嶄細鍦ㄤ唬鐮佷腑鎵懼埌浠諱綍濂囩壒鐨勬硾鍨嬫垨鏂扮殑 BackgroundWorker 欏廣侼SORT 紼嬪簭闆嗕腑鐨勬帓搴忕畻娉曟潵鑷敱 Jonathan de Halleux銆丮arc Clifton 鍜?Robert Rohde 寮犺創鍒?The Code Project 涓婄殑涓綃囦紭縐鏂囩珷錛堣鍙傞槄 Sorting Algorithms In C#錛夛紝璇ョ▼搴忛泦灝嗙畻娉曞皝瑁呭埌鍏叡緇撴瀯涓紝浠ヤ究鎮ㄥ彲浠ヨ交鏉懼湴鏇挎崲鎵ц鍏冪礌浜ゆ崲鍜岃緗殑綾匯傚洜涓哄畠浠叿鏈夐潪甯稿ソ鐨勪綋緋葷粨鏋勶紝鎵浠ユ垜闇瑕佸叧蹇冪殑鎵鏈夊唴瀹逛負 UI 閮ㄥ垎銆?/p> 鍦ㄦ湰鏂囩殑鍏朵綑閮ㄥ垎涓紝鎴戝皢鍒嗘瀽 Animated Algorithm 紼嬪簭銆傚鏋?EPT 鍥㈤槦灝嗚紼嬪簭浣滀負紺轟緥搴旂敤紼嬪簭闅忛檮鍦ㄤ駭鍝佷腑錛屽垯浼氶潪甯告銆傦紙鍝堝搱銆傦級 鍦?Visual Studio 2005 Beta 1 涓紝鍦ㄥ摢閲屽彲浠ユ壘鍒?EPT 褰撶劧鏄笉鏄庢樉鐨勩侲PT 鍦ㄦ偍鍚姩 Performance Wizard錛堝畠浣嶄簬鈥淭ools鈥濊彍鍗曚笅錛夋椂鍚姩錛屽茍涓旀棤璁烘槸鍚︽墦寮欏圭洰錛屽畠閮藉瓨鍦ㄣ傝璁頒綇錛孭erformance Wizard 鎵鍒涘緩鐨勬ц兘浼氳瘽涓嶆槸欏圭洰鐨勪竴閮ㄥ垎錛涘畠浠疄闄呬笂鏄叿鏈夎嚜宸辯殑 IDE 紿楀彛錛堢О涓?Performance Explorer錛夌殑鍗曠嫭鏂囦歡銆傛偍鍙互閫氳繃浠庘淔ile鈥潀鈥淥pen鈥濆璇濇涓夋嫨 PSESS 鏂囦歡錛屾潵鎵撳紑鎮ㄥ垱寤虹殑鎬ц兘浼氳瘽銆?/p> 濡傛灉鎮ㄥ湪鍗曟鎵ц Performance Wizard 鏃舵病鏈夋墦寮欏圭洰錛屽垯鎵浜х敓鐨勬ц兘浼氳瘽灝嗕笌鎮ㄦ寚瀹氱殑浜岃繘鍒舵枃浠剁浉鍏寵仈銆備絾鏄紝鍦ㄦ祴璇曠増涓紝鍦ㄦ偍鎸囧畾瑕佽繍琛岀殑浜岃繘鍒舵枃浠舵椂錛屽繀欏繪墦寮鍏寵仈鐨勯」鐩傛垜鍙槸鎯抽『渚挎彁涓涓嬭繖涓皬灝忕殑鎶宸э紝鍥犱負褰撴垜絎竴嬈¢亣鍒拌闂鏃訛紝瀹冪‘瀹炶鎴戝洶鎯戜笉宸層?/p> 鍦ㄦ偍鍚姩 Performance Wizard 浠ュ悗錛屽憟鐜板湪鎮ㄩ潰鍓嶇殑絎竴涓睆騫曡姹傛偍閫夋嫨瑕佸垎鏋愮殑搴旂敤紼嬪簭銆傚鏋滄偍鎵撳紑浜嗕竴涓彲鐢熸垚澶氫釜紼嬪簭闆嗙殑欏圭洰錛堝 Animated Algorithm錛夛紝鍒欏彧鑳戒粠璇ュ悜瀵間腑閫夊彇涓涓▼搴忛泦銆傚鏋滆榪涜閲囨牱錛屽垯鍙夊彇榪欎竴涓▼搴忛泦鏄緢濂界殑錛屽洜涓?EPT 閲囨牱浼氬垎鏋愬姞杞界殑鎵鏈夌▼搴忛泦錛堝寘鎷偅浜涙潵鑷鏋剁被搴撶殑紼嬪簭闆嗭級銆備絾鏄紝濡傛灉鎮ㄨ瀵瑰涓▼搴忛泦鎵ц浠〃鍖栧垎鏋愶紝鍒?Performance Wizard 鍙夋嫨榪欎竴涓▼搴忛泦錛屽洜姝ゆ偍灝嗛渶瑕佸湪 Performance Explorer 涓墍鐢熸垚鐨勬ц兘浼氳瘽涓寚瀹氬叾浠栭」鐩垨紼嬪簭闆嗐傜◢鍚庢垜灝嗗悜鎮ㄨ鏄庡浣曞畬鎴愯宸ヤ綔銆?/p> 鍦ㄩ夋嫨浜嗚鍦ㄦц兘浼氳瘽涓嬌鐢ㄧ殑紼嬪簭闆嗘垨欏圭洰涔嬪悗錛屾偍蹇呴』閫夊彇鍒嗘瀽鏂規硶銆傚湪 Performance Explorer 涓殑浠諱綍浣嶇疆錛屾偍閮藉彲浠ュ湪閲囨牱鍜屼華琛ㄥ寲涔嬮棿鍒囨崲錛屼互婊¤凍鑷繁鐨勯渶瑕侊紱鎮ㄥ湪璇ュ悜瀵奸〉涓繘琛岀殑閫夋嫨鍙〃紺烘偍鏈鍒濆笇鏈涙墽琛岀殑鎿嶄綔銆傚湪閫夋嫨浜嗗垎鏋愭柟娉曚箣鍚庯紝鍚戝灝卞熀鏈畬鎴愪簡銆傚浜?EPT 鐨勬渶緇堢増鏈紝鎮ㄥ皢鍦?Performance Wizard 涓叿鏈夌敤浜庢寚瀹氶檮鍔犱俊鎭殑鏇村閫夐」銆傛渶緇堢増鏈繕灝嗕嬌鎮ㄥ彲浠ョ洿鎺ヤ粠 Performance Explorer 涓垱寤烘ц兘浼氳瘽銆?/p> 鍥?2 鏄劇ず浜?Performance Explorer 鍦ㄥ垰鍒氬畬鎴?Performance Wizard 姝ラ浠ュ垱寤?AnimatedAlgorithms 欏圭洰鐨勪華琛ㄥ寲榪愯涔嬪悗鐨勭獥鍙c傝娣誨姞鍙︿竴涓」鐩殑杈撳嚭浜岃繘鍒舵枃浠訛紝璇峰彸閿崟鍑燴淭argets鈥濇枃浠跺す錛岀劧鍚庝粠涓婁笅鏂囪彍鍗曚腑閫夋嫨鈥淎dd Target Project鈥濄傚鏋滆娣誨姞涓庤欏圭洰娌℃湁鍏寵仈鐨勭壒瀹氫簩榪涘埗鏂囦歡錛岃閫夋嫨鍙︿竴涓夐」 鈥斺淎dd Target Binary鈥濄傚鏋滄偍宸茬粡閫夋嫨浜嗏淎dd Target Project鈥濓紝鍒欏彲浠ュ湪浜х敓鐨勫璇濇涓粠宸叉墦寮鐨勮В鍐蟲柟妗堜腑閫夋嫨鍏朵粬欏圭洰銆?/p> 鍥?2 Performance Explorer 濡傛灉鎮ㄥ凡緇忛夋嫨浜嗕華琛ㄥ寲榪愯錛堝畠鐢辯豢鑹插惎鍔ㄧ澶翠笅闈㈢殑涓嬫媺鍒楄〃妗嗕腑鐨勬枃鏈〃紺猴級錛屽垯浜岃繘鍒舵枃浠朵華琛ㄥ寲灝嗗湪紼嬪簭鎵ц涔嬪墠鍙戠敓銆傚鏋滄偍涓嶅笇鏈涢拡瀵硅繍琛屼華琛ㄥ寲鏌愪釜鐗瑰畾鐨勪簩榪涘埗鏂囦歡錛屽垯璇峰彸閿崟鍑昏浜岃繘鍒舵枃浠訛紝騫跺彇娑堥変腑鈥淚nstrument Binary鈥濊彍鍗曢夐」銆?/p> 濡傛灉鎮ㄥ凡緇忛夋嫨浜嗛噰鏍峰垎鏋愶紝騫朵笖甯屾湜闄勫姞鍒版煇涓鍦ㄨ繍琛岀殑欏圭洰錛屽垯鍗曞嚮鈥淎ttach/Detach鈥濇寜閽紙鈥淪tart鈥濇寜閽彸渚х殑鏂滃悜綆ご錛夊皢鍛堢幇鈥淎ttach Profiler to Process鈥濆璇濇銆傞氳繃 EPT錛屾偍鍙互鏍規嵁闇瑕侀檮鍔犲埌浠繪剰澶氱殑榪涚▼錛屼互渚胯幏寰楀搴旂敤紼嬪簭鐨勮璇嗐傗淎ttach Profiler to Process鈥濆璇濇榪樺厑璁告偍浠庣壒瀹氱殑浜岃繘鍒舵枃浠朵腑鍒嗙鍒嗘瀽銆傚湪灝嗘潵鐨勬煇涓鏈?MSDN Magazine 涓紝鎴戝皢鏇磋緇嗗湴璁ㄨ濡備綍闄勫姞鍒扮幇鏈夌殑榪涚▼錛堢壒鍒槸涓轟簡榪涜 ASP.NET 鎬ц兘璋冩暣錛夈?/p> Performance Explorer 紿楀彛欏墮儴鐨勬渶鍚庝竴涓寜閽槸鏃犳墍涓嶅湪鐨勨淧roperties鈥濇寜閽傚湪鍚姩鍒嗘瀽榪愯涔嬪墠錛屾偍鍙兘甯屾湜嫻忚涓涓嬫ц兘浼氳瘽灞炴э紝浠ヨ緗嚑涓叧閿睘鎬с傜涓涓睘鎬т綅浜庘淕eneral鈥濋夐」鍗′笂錛屽畠鏄偍甯屾湜涓烘ц兘浼氳瘽瀛樺偍鎬ц兘鎶ュ憡鐨勪綅緗傚湪鍒嗘瀽欏圭洰鏃訛紝榛樿璁劇疆鏄皢鎶ュ憡瀛樺偍鍦ㄤ笌瑙e喅鏂規鐩稿悓鐨勭洰褰曚腑銆備絾鏇村ソ鐨勫仛娉曟槸灝嗘ц兘浼氳瘽鍜屽畠浠殑鐩稿簲鎶ュ憡鏀劇疆鍦ㄥ畠浠嚜宸辯殑鐩綍涓紝浠ヤ究鎮ㄥ彲浠ユ洿瀹規槗鍦板瓨鍌ㄧ壒瀹氱殑榪愯闆嗐傝繖鏍瘋繕鍙互鏇村鏄撳湴鍒嗘瀽涔嬪墠鍜屼箣鍚庣殑鎯呭喌錛屼互渚挎煡鐪嬫偍鎵榪涜鐨勪唬鐮佹洿鏀圭殑褰卞搷銆?/p> 鍦ㄢ淕eneral鈥濋夐」鍗′笂錛屾偍榪樺彲浠ュ湪浠〃鍖栧拰閲囨牱鍒嗘瀽涔嬮棿鍒囨崲錛堣繖浼氭洿鏀瑰湪 Performance Explorer 涓樉紺虹殑鍊鹼級銆傚湪鎴戣繘琛岀殑鎬ц兘璋冩暣涓紝鎴戝枩嬈㈠皢鐗瑰畾鐨勪細璇濅笓鐢ㄤ簬鍗曚釜綾誨瀷鐨勫垎鏋愶紝浠ラ伩鍏嶅嚭鐜頒笌鎶ュ憡鏈夊叧鐨勬販娣嗐傛病鏈変換浣曚簨鎯呴樆姝㈡偍涓烘墍鏈夌綾葷殑鐗瑰畾鏂規錛堟兜鐩栦粠鍒嗘瀽綾誨瀷鍒板崟涓簩榪涘埗鏂囦歡浠〃鍖栫殑鎵鏈夋柟妗堬級鍒涘緩鏁頒互鐧捐鐨勪笉鍚屾ц兘浼氳瘽鏂囦歡銆傛垜榪樺皢鎻愪竴涓嬧淕eneral鈥濋夐」鍗′笂鐨勬渶鍚庝竴涓」錛屽畠鍏鋒湁涓涓潪甯歌浜虹殑鍚嶇О 鈥斺淢anaged Allocation Profiling鈥濓紝鐩鎬俊榪欎細浣挎偍鎰熷埌鏇村姞濂藉銆傚湪鎴戣璁哄畬甯歌鍒嗘瀽涔嬪悗錛屾垜灝嗚繑鍥炲埌璇ラ」銆?/p> 鈥淧erformance Session鈥濆睘鎬ч〉涓婄殑鍙︿竴涓湁瓚g殑閫夐」鍗℃槸鈥淪ampling鈥濋夐」鍗★紙璇峰弬瑙?b>鍥?3錛夈傚湪榪欓噷錛屾偍鍙互鍛婅瘔 EPT 鎮ㄨ鎵ц鍝綾誨瀷鐨勯噰鏍楓傛濡傛垜鍦ㄥ墠闈㈡彁鍒扮殑閭f牱錛屾偍瀵逛簬甯屾湜濡備綍榪涜閲囨牱鍏鋒湁闈炲父濂界殑鎺у埗銆?/p> 鍥?3 鍚勭 EPT 閲囨牱璁℃暟鍣ㄩ夐」 鍦ㄦ墽琛屽垎鏋愯繍琛屾椂錛孍PT 浼氬湪浜岃繘鍒舵枃浠跺湪紜洏涓墍澶勭殑浣嶇疆涓婂皢鍏朵華琛ㄥ寲銆傚鏋滄偍甯屾湜灝嗕華琛ㄥ寲鐨勪簩榪涘埗鏂囦歡縐誨姩鍒板彟涓涓綅緗紝璇烽夋嫨鈥淧erformance Session鈥濆睘鎬ч〉涓殑鈥淏inary鈥濋夐」鍗★紝鐒跺悗閫変腑鈥淩elocate Instrumented Binaries鈥濓紙瀹冧笌 REBASE 鏍峰紡鐨勯噸瀹氫綅緇濆娌℃湁浠諱綍鍏崇郴錛夛紝騫朵笖鎸囧畾鎮ㄥ笇鏈涘皢鏇存敼鍚庣殑浜岃繘鍒舵枃浠剁Щ鑷充綍澶勩?/p> 鈥淚nstrumentation鈥濋夐」鍗′嬌鎮ㄥ彲浠ユ寚瀹氬笇鏈涘湪浠〃鍖栧彂鐢熶箣鍓嶅拰涔嬪悗榪愯鐨勭▼搴忋傚鏋滄偍闇瑕佸浠〃鍖栫殑浜岃繘鍒舵枃浠舵墽琛屽叾浠栦換鍔★紙渚嬪錛屽皢鍏剁Щ鍔ㄥ埌鍏ㄥ眬紼嬪簭闆嗙紦瀛樹腑鎴?Web 鏈嶅姟鍣ㄤ笂鐨勭壒瀹氫綅緗級錛屽垯璇ラ夐」鍗″彲鑳藉緢鏈夌敤銆傗淎dvanced鈥濋夐」鍗″湪璇ユ祴璇曠増涓湭鍏紑銆傛渶鍚庯紝閫氳繃鈥淐ounters鈥濋夐」鍗★紝鎮ㄥ彲浠ュ憡璇?EPT 浠庣郴緇熺殑 CPU 涓敹闆嗗叾浠栨暟鎹紝渚嬪錛孡2 鎴?L3 緙撳瓨璇誨彇涓嶄腑銆傛樉鐒訛紝榪欎簺閫夐」鏄彧鏈夊皯鏁板紑鍙戜漢鍛樻墠浼氶渶瑕佺殑闈炲父楂樼駭鐨勯夐」錛屼絾鏄鏋滄偍紜疄闇瑕佸畠浠紝閭d箞瀹冧滑鍙互鍙戞尌宸ㄥぇ鐨勪綔鐢ㄣ?/p> 鍦ㄦ垜緇х畫璁ㄨ鏌ョ湅閲囨牱鏁版嵁涔嬪墠錛屾垜鎯蟲彁涓涓嬶紝鈥淧erformance Explorer鈥濈獥鍙e彲浠ユ牴鎹偍鐨勯渶瑕佹墦寮浠繪剰澶氫釜鎬ц兘浼氳瘽銆傚綋鎮ㄥ笇鏈涜瀵熺壒瀹氱殑鍓嶅悗鏂規錛屾垨鑰呭笇鏈涚敤涓嶅悓鐨勪華琛ㄥ寲浜岃繘鍒舵枃浠舵墽琛屽崟鐙殑嫻嬭瘯榪愯鏃訛紝榪欎竴鐐規瀬涓烘湁鐢ㄣ傚綋鎮ㄦ墦寮澶氫釜鎬ц兘浼氳瘽鏃訛紝搴斿綋紜繚鍙抽敭鍗曞嚮鐗瑰畾鐨勪細璇濓紝閫夋嫨鈥淪et as Current Session鈥濅互渚胯璇ヤ細璇濈殑璁劇疆鎵ц錛岀劧鍚庡皢鎶ュ憡褰掓。鍒板畠鐨勬姤鍛婅妭鐐逛腑銆?/p> 灝嗘ц兘浼氳瘽璁劇疆涓烘偍甯屾湜鎵ц鐨勬搷浣滀互鍚庯紝灝卞彲浠ュ惎鍔ㄥ垎鏋愪簡銆傛垜灝嗛鍏堝 Animated Algorithm 鎵ц閲囨牱鍒嗘瀽錛屼互鏌ョ湅鎴戞槸鍚﹀彲浠ユ壘鍒頒竴浜涚儹鐐廣備粠閲囨牱涓幏寰楄壇濂芥暟鎹殑鍏抽敭鍦ㄤ簬鎵ц杈冮暱鏃墮棿鐨勮繍琛屻傚浜?Animated Algorithm錛屾垜浼氬皢 15 涓帓搴忕畻娉曚腑鐨勬瘡涓涓畻娉曡繍琛屼袱嬈★紝騫跺皢閲囨牱璁劇疆涓洪粯璁ょ殑涓鐧句竾涓椂閽熷懆鏈熴?/p> 鍦ㄥ畬鎴愭煇涓繍琛屼箣鍚庯紝EPT 浼氬皢璇ヨ繍琛岀殑鎶ュ憡鏀懼埌鎬ц兘浼氳瘽鐨勨淩eports鈥濇枃浠跺す涓侲PT 鍦ㄨ繍琛屾湡闂存敹闆嗗師濮嬫ц兘鏁版嵁錛屽茍灝嗗叾嫻佸紡浼犺緭鍒版姤鍛婃枃浠朵腑錛堜笉鍋氫換浣曞垎鏋愶級銆傝繖鏍鳳紝鎮ㄥ彲浠ュ湪榪愯搴旂敤紼嬪簭鏃墮伩鍏嶆墍鏈夌郴緇熷紑閿錛屼絾鏄偍灝嗕負澶у瀷鎶ュ憡鏂囦歡浠樺嚭浠d環銆傛垜鍒氭墠瀹屾垚鐨勮繍琛岀殑閲囨牱鎶ュ憡鏂囦歡澶у皬涓?3.70MB錛屽畠鐢ㄤ簡澶х害涓夊垎閽熸墠瀹屾垚銆傝紜繚鎮ㄥ湪榪愯 EPT 鏃跺叿鏈夊ぇ閲忕殑紓佺洏絀洪棿銆?/p> 鎵鏈夋暟鎹垎鏋愶紙瀹冨繀鐒朵即鏈夎皟鐢ㄥ爢鏍堢殑鐢熸垚浠ュ強鎬ц兘鏁板瓧鐨勮綆楋級閮藉湪鎮ㄦ墦寮鎶ュ憡鏂囦歡鏃跺彂鐢熴傚浜庢祴璇曠増錛屽湪鎵撳紑鏂囦歡鏃墮熷害鍙兘浼氶檷浣庛傜湅璧鋒潵瑙嗗浘濂藉儚澶勪簬鏃犻檺寰幆涓紝浣嗘槸錛屽鏋滆繘搴︽爮姝e湪鎶ュ憡紿楀彛涓Щ鍔紝閭d箞璇鋒偍鑰愬績涓浜涳紝鏂囦歡鏈緇堝皢寮瑰嚭銆?/p> 浠諱綍鍒嗘瀽榪愯涓殑絎竴涓鍥炬槸鈥淧erformance Report Summary鈥濓紝瀹冩樉紺哄湪鍒氬垰瀹屾垚鐨?Animated Algorithm 閲囨牱榪愯鐨?b>鍥?4 涓備笉鍑烘墍鏂欙紝閲囨牱灝嗗彂鐢熷湪鏁翠釜搴旂敤紼嬪簭涓紝鍥犳鎮ㄦ鍦ㄦ煡鐪嬬殑淇℃伅涔熷氨鏄偍灝嗗湪搴旂敤紼嬪簭涓湅鍒扮殑鍐呭錛氬ぇ閮ㄥ垎宸ヤ綔閮藉彂鐢熷湪妗嗘灦綾誨簱鎴栨搷浣滅郴緇熷唴閮ㄣ傚鏋滄偍紜疄鍦ㄩ噰鏍封淪ummary鈥濊鍥句腑鐪嬪埌浜嗘偍鐨勪竴涓柟娉曪紝鍒欐偍寰堝彲鑳界湅鍒頒簡涓涓ц兘闂銆?/p> 鍥?4 EPT 閲囨牱鎬ц兘鎶ュ憡鎽樿 蹇熸祻瑙堜竴涓?b>鍥?4錛屾偍鍙兘鎯崇煡閬?Inclusive Sampled 鍜?Exclusive Sampled 涔嬮棿鐨勫尯鍒侲xclusive Sampled 鎰忓懗鐫璇ユ柟娉曞湪鍙栨牱鏃朵綅浜庡爢鏍堢殑欏墮儴銆傛崲鍙ヨ瘽璇達紝瀹冩槸褰撳墠姝e湪鎵ц鐨勫嚱鏁般侷nclusive Sampled 鎰忓懗鐫璇ュ嚱鏁板湪鍙栨牱鏃跺嚭鐜板湪璋冪敤鍫嗘爤涓傚洜鑰岋紝鍖呭惈鏂規硶鏄綋鍓嶆鍦ㄦ墽琛岀殑鏂規硶鐨勮皟鐢ㄦ柟銆?/p> 鍦ㄩ噰鏍鋒柟妗堜腑錛屼竴涓柟娉曞湪璋冪敤鍫嗘爤 (Inclusive Sampled) 涓嚭鐜扮殑嬈℃暟瓚婂錛岃鍑芥暟鍦ㄦ墽琛屼腑鑺辮垂鐨勬椂闂村氨瓚婂錛屽洜姝よ繖閲屾槸鎮ㄩ渶瑕侀噸鐐瑰叧娉ㄤ互榪涜鎬ц兘璋冩暣鐨勫湴鏂廣傚浜?Exclusive Sampled 鍑芥暟鑰岃█錛屽嚱鏁板湪閭i噷棰戠箒鍑虹幇琛ㄦ槑璇ュ嚱鏁版鍦ㄨ棰戠箒鍦拌皟鐢紝浣嗘槸瀹冪殑鎵ц瀹為檯涓婂彲鑳介潪甯稿揩閫熴傚浜庡儚 Animated Algorithm 榪欐牱闇瑕佽繘琛屽ぇ閲忓浘褰㈠鐞嗙殑搴旂敤紼嬪簭錛屾垜瀹屽叏鑳藉棰勬枡鍒?GDIPLUS.DLL 涓殑鏌愪釜鍑芥暟灝嗛潬榪戝垰鍒氭樉紺虹殑鍒楄〃鐨勯《閮ㄣ傚湪鍥?4 涓紝浣嶄簬 GDIPLUS.DLL 涓亸縐婚噺 0x5B8D 澶勭殑鍑芥暟錛堝畠鎭板ソ鏄?FLOOR 鍑芥暟錛夎涓鐩磋皟鐢紝浠ヤ究璁$畻鍦ㄥ睆騫曚笂鐨勫摢涓綅緗樉紺烘煇浜涘唴瀹廣傚綋鎮ㄨ瀵熸ц兘榪愯鏃訛紝璇風‘淇濊緗鍙鋒湇鍔″櫒浠ヨ幏寰楀彲鑳藉瓨鍦ㄧ殑鏈浣充俊鎭傚湪鎾板啓鏈枃鏃訛紝鎴戜嬌鐢ㄤ簡 EPT 鐨勬湭鍙戝竷鐗堟湰錛屽洜鑰岀鍙峰皻涓嶅彲鐢ㄣ?/p> 鍦ㄦ垜璺沖埌鍏朵粬瑙嗗浘涓互鍓嶏紝鎴戝笇鏈涗華琛ㄥ寲 Animated Algorithm錛屽茍涓斿畬鎴愪笌鎴戦拡瀵歸噰鏍峰垎鏋愬櫒瀹屾垚鐨勮繍琛岀浉鍚岀殑榪愯錛屼互渚挎樉紺轟華琛ㄥ寲榪愯鐨勬ц兘鎶ュ憡鎽樿銆傛濡傛偍鍙互鐚滃埌鐨勯偅鏍鳳紝浠〃鍖栫殑榪愯浼氱敓鎴愭瘮閲囨牱榪愯澶氬緱澶氱殑鏁版嵁銆傚浜庤榪愯錛屾垜浠〃鍖栦簡 Animated Algorithm 涓殑鍏ㄩ儴浜斾釜紼嬪簭闆嗭紝騫舵渶緇堝緱鍒頒竴涓?375MB 澶у皬鐨勪細璇濇枃浠躲?/p> 閲囨牱鍜屼華琛ㄥ寲鏁版嵁涔嬮棿鐨勪富瑕佸尯鍒槸錛氶噰鏍鋒煡鐪嬫暣涓繘紼嬬┖闂達紝騫朵笖灝嗘樉紺烘鏋剁被搴撴垨鎿嶄綔緋葷粺鍐呴儴錛堟崲鍙ヨ瘽璇達紝灝辨槸鎮ㄥ湪鍏朵腑涓嶅叿鏈夋簮浠g爜鐨勪綅緗級鐨勮皟鐢ㄣ傚彟涓鏂歸潰錛屼華琛ㄥ寲鍙煡鐪嬪簲鐢ㄧ▼搴忎互鍙婃偍鍦ㄩ潪浠〃鍖栨ā鍧椾笂鐩存帴璋冪敤鐨勬柟娉曘備緥濡傦紝濡傛灉鎮ㄥ叿鏈変竴涓淗ello World!鈥濆簲鐢ㄧ▼搴忥紝騫朵笖瀹冪殑 Main 鍙皟鐢?Console.WriteLine錛屽垯鎮ㄥ皢鑾峰緱 Main 涓換浣曞伐浣滅殑璁℃椂淇℃伅浠ュ強 Console.WriteLine 闀垮害鐨勮鏃朵俊鎭紝浣嗘槸鎮ㄤ笉浼氳幏寰楁湁鍏?Console.WriteLine 鏂規硶鐨勪換浣曡緇嗕俊鎭?/p> 鍥?5 鏄劇ず浜嗕華琛ㄥ寲榪愯鐨勬ц兘鎶ュ憡鎽樿銆傜涓涓〃鈥淢ost Called Functions鈥濇樉紺轟簡棰戠箒浣跨敤鐨勫嚱鏁般傝琛ㄤ腑鐨勭涓鍒楄閿欒鏍囪涓烘椂闂達紱瀹冨疄闄呬笂琛ㄧず瀵硅鍑芥暟鐨勮皟鐢ㄦ鏁般傜櫨鍒嗘瘮鍒楁樉紺轟簡瀵硅鐗瑰畾鍑芥暟榪涜鐨勮皟鐢ㄦ繪鏁版墍鍗犵殑鐧懼垎姣斻傚湪澶у鏁拌繍琛屼腑錛屾偍灝嗗湪榪欓噷鐪嬪埌妗嗘灦綾誨簱鎴栨搷浣滅郴緇熷嚱鏁般傚鏋滄偍鐪嬪埌涓浜涙潵鑷偍鑷繁鐨勪唬鐮佺殑鍑芥暟錛屽垯鎮ㄦ渶濂戒簡瑙d竴涓嬫偍涓轟粈涔堝姝ら綣佸湴璋冪敤璇ョ壒瀹氬嚱鏁般?/p> 鍥?5 浠〃鍖栬繍琛岀殑鎽樿 鈥淔unctions with Most Individual Work鈥濊〃鍒楀嚭浜嗛偅浜涜姳璐瑰ぇ閮ㄥ垎鏃墮棿浠ヤ粎浠呮墽琛岃鍑芥暟錛堟病鏈変換浣曞叾浠栧嚱鏁拌皟鐢級鐨勬柟娉曘傝繖涔熺О涓鴻鍑芥暟鐨勭嫭鍗犳椂闂淬傚浜庢祴璇曠増鏈紝鈥淭ime鈥濆垪鐨勫崟浣嶄負鏃墮挓璧版牸鏁般傚浜庢渶緇堢増鏈紝鍗曚綅灝嗘槸姣銆備絾鏄紝鎴戣涓烘ц兘榪愯鐨勫疄闄呭師濮嬪崟浣嶅浜庡垎鏋愭病鏈夌敤銆傛渶閲嶈鐨勬暟瀛楁槸鐧懼垎姣斻傚湪瑙傚療鎬ц兘闂鏃訛紝鎮ㄥ笇鏈涚煡閬擄紝涓庡簲鐢ㄧ▼搴忎腑鐨勬墍鏈夊叾浠栨柟娉曠浉姣旓紝鍝釜鏂規硶鍗犵敤浜嗘渶闀跨殑鏃墮棿銆傛偍鍦ㄨ瀵熷儚 3519639455 鍜?3492589504 榪欐牱鐨勪袱涓暟瀛楁椂錛屽緢闅懼瀹冧滑榪涜浠涔堟瘮杈冦傚垢榪愮殑鏄紝璇ヨ〃鍖呭惈鐧懼垎姣旓紝鑰屾垜瀵?EPT 鍥㈤槦鐨勫緩璁槸浠庡浘琛ㄤ腑涓㈠純鍘熷鏁版嵁銆?/p> 鏈鍚庝竴涓〃鈥淔unctions Taking Longest鈥濇樉紺烘柟娉曠殑瀹為檯鏃墮棿錛堜篃縐頒負璺戣〃鏃墮棿鎴栬繍琛屾椂闂達級銆傚垎鏋愬櫒璁板綍鏂規硶鐨勫叆鍙g偣鏃墮棿鍜屽嚭鍙g偣鏃墮棿錛屽茍灝嗚繖涓や釜鍊肩浉鍑忋傝鏁板瓧娑電洊浜嗚璋冪敤鐨勬墍鏈夊瓙鏂規硶銆佹墍鏈変笂涓嬫枃鍒囨崲浠ュ強璇ユ柟娉曟墽琛岀殑浼戠湢銆傚湪鍥?5 涓紝鎮ㄥ彲浠ョ湅鍒?System.Windows.Forms.Application.Run 鍗犵敤浜嗘渶闀挎椂闂達紝灝卞儚鎮ㄥ Windows 紿椾綋搴旂敤紼嬪簭鎵棰勬枡鐨勯偅鏍楓傚敖綆″緢澶氬紑鍙戜漢鍛樺皢娉ㄦ剰鍔涢泦涓簬鐙崰鏃墮棿錛屼絾榪欏彧鏄暣涓ц兘鐘跺喌鐨勪竴灝忛儴鍒嗐傚鏋滄柟娉曟鍦ㄥ鏁版嵁搴撹繘琛岃皟鐢ㄦ垨鑰呰繘琛?Web 鏈嶅姟璋冪敤錛屽垯鎮ㄧ殑鏂規硶鍦ㄨ繍琛屾椂鎵鍦ㄧ殑綰跨▼灝嗗湪絳夊緟榪欎簺璋冪敤榪斿洖鏁版嵁鏃墮樆濉烇紝浠庤屼嬌寰楄綰跨▼浠?CPU 涓縐昏蛋銆傞氳繃瀵嗗垏鍏蟲敞鏂規硶鐨勮繍琛屾椂闂達紝鎮ㄥ彲浠ユ壘鍒頒唬鐮佷腑姝e湪闄嶄綆搴旂敤紼嬪簭榪愯閫熷害鐨勯儴鍒嗐?/p> 灝界鎽樿瑙嗗浘寰堜笉閿欙紝浣嗘偍鏈鎰熷叴瓚g殑灝嗘槸鏌ョ湅浠g爜鍦ㄤ綍澶勯樆濉炰簡緋葷粺鐨勫叾浣欓儴鍒嗭紙瀵逛簬閲囨牱榪愯鑰岃█錛夛紝鎴栬呴樆濉炰簡搴旂敤紼嬪簭鐨勫叾浠栨柟娉曪紙瀵逛簬浠〃鍖栬繍琛岃岃█錛夈傝繖鏄淔unction鈥濊鍥劇殑鑱岃矗鑼冨洿 鈥?閫氳繃鍗曞嚮鎶ュ憡紿楀彛搴曢儴鐨勨淔unction鈥濇寜閽彲浠ラ夋嫨璇ヨ鍥俱傛偍榪樺彲浠ュ弻鍑燴淪ummary鈥濊鍥劇殑浠諱綍鏂規硶浠ヨ煩鑷斥淔unction鈥濊鍥俱?/p> 瀵逛簬閲囨牱榪愯錛屸淔unction鈥濊鍥炬樉紺轟簡鑷沖皯涓涓寘鍚崟鑾蜂腑鎵鏈夊嚱鏁版崟鑾風殑鍒楄〃銆傚浜庝華琛ㄥ寲榪愯錛屾偍灝嗙湅鍒頒綔涓鴻榪愯鐨勪竴閮ㄥ垎璋冪敤鐨勬墍鏈変華琛ㄥ寲鏂規硶銆傛棤璁烘偍姝e湪鎵ц鍝綾誨瀷鐨勫垎鏋愶紝閮戒細鍦ㄢ淔unction鈥濊鍥句腑鏄劇ず寰堝鏁版嵁錛屽洜姝ゆ偍鍙互瀵逛唬鐮佺殑鐘跺喌鏈変竴鐐瑰効鎰熻銆?/p> 榛樿鎯呭喌涓嬶紝閲囨牱鈥淔unction鈥濊鍥炬樉紺衡淚nclusive Samples鈥濆垪鍜屸淓xclusive Samples鈥濆垪銆傜敱浜庢垜鍠滄鐧懼垎姣旀暟瀛楋紝鍥犳鎴戝彸閿崟鍑諱簡鍒楁爣棰樹互鍚戝垪鏍囬涓坊鍔犫淚nclusive Percent鈥濆拰鈥淓xclusive Percent鈥濄傚鏋滄偍瑕佸澶氳繘紼嬬郴緇熻繘琛岄噰鏍鳳紝鍒欏彲鑳藉笇鏈涘寘鍚叾浠栧垪錛堜緥濡傦紝鈥淧rocess Name鈥濇垨鈥淧rocess ID鈥濓級錛屼互渚挎偍鍙互鏍囪瘑鍝釜鏂規硶閲囨牱涓庡摢涓繘紼嬬浉閰嶃傛偍榪樺彲浠ュ湪浠〃鍖栤淔unction鈥濊鍥句腑璁劇疆鍒楁爣棰橈紝浣嗘槸鎮ㄥ皢鍏鋒湁涓嶅悓鐨勬爣棰樼粍浠ヤ緵閫夋嫨銆?/p> 鍦ㄢ淔unction鈥濊鍥句腑鍒嗘瀽閲囨牱榪愯鏃訛紝鎴戝枩嬈㈤鍏堟壂涓鐪尖淔unction鈥濊鍥劇殑澶村嚑涓寜鈥淚nclusive Samples鈥濆垪鎺掑簭鐨勯〉錛屼互浜嗚В姝e湪鎵ц鐨勬柟娉曘傚鏋滄垜鍦ㄥご鍑犱釜欏典腑娌℃湁鐪嬪埌鎴戠殑浠諱綍鏂規硶錛屽垯鎴戜細鍙抽敭鍗曞嚮鈥淔unction鈥濊鍥懼茍閫夋嫨鈥淕roup by Module鈥濓紝浠ヤ究鑾峰緱鏍戞姤鍛婅鍥俱傚綋鎮ㄥ皢鍑芥暟鎸夋ā鍧楀垎緇勬椂錛屾寜鐗瑰畾鍒楁帓搴忓彲浠ユ紜墽琛?鈥?榪欐槸涓欏瑰緢涓嶉敊鐨勫姛鑳姐?/p> 瀵逛簬浠〃鍖栬繍琛岋紝鈥淔unction鈥濊鍥懼叿鏈夋洿澶氳鏄劇ず鐨勫垪銆傚鏋滄偍鎷ユ湁涓鍙?40 鑻卞鐨勬樉紺哄櫒錛屽垯鏃犻渶鏈澶у寲 Visual Studio .NET 紿楀彛灝卞簲褰撹兘澶熺湅鍒版墍鏈夎繖浜涘垪銆傚浜庢垜浠腑鐨勫叾浠栦漢鑰岃█錛屾煡鐪嬧淔unction鈥濊鍥劇殑鏈浣蟲柟寮忔槸鎸?Alt + Shift + Enter 浠ュ垏鎹㈠埌鍏ㄥ睆騫曟ā寮忋?/p> 鍦ㄨ繖浜涘垪涓紝鈥淔unction鈥濊鍥句腑鐨勪華琛ㄥ寲榪愯浣跨敤鎴戝湪鍓嶉潰瑙i噴榪囩殑鈥滃寘鍚濆拰鈥滅嫭鍗犫濇湳璇備絾鏄紝榪樻湁鍙︿竴涓嬌浜烘販娣嗙殑鏈錛氬簲鐢ㄧ▼搴忋傛濡傛垜鎻愬埌鐨勯偅鏍鳳紝榪愯鏃墮棿鏄粠涓涓華琛ㄥ寲鐐瑰埌鍙︿竴涓華琛ㄥ寲鐐圭殑鎬繪椂闂達紝鑰屼笉綆¤綰跨▼鍙兘榪涜浜嗗摢浜涗笂涓嬫枃鍒囨崲銆傚簲鐢ㄧ▼搴忔椂闂寸殑鎬濇兂鏄?EPT 灝嗘彁鍙栧嚭鍦ㄨ繖浜涗笂涓嬫枃鍒囨崲涓墍鑺辮垂鐨勬椂闂達紝浠ヤ究鎮ㄥ彲浠ョ湅鍒版偍鐨勪唬鐮佸湪 CPU 涓疄闄呮墽琛岀殑鏃墮棿銆?/b>鍥?6 鍒楀嚭浜嗘偍灝嗗湪浠〃鍖栤淔unction鈥濊鍥句腑鐪嬪埌鐨勪笉閭d箞鏄庢樉鐨勫垪鐨勫畾涔夈傛偍鍙兘甯屾湜灝嗗畠浼犻佸埌鏄劇ず鍣ㄤ笂錛岀洿鍒?EPT 鐨勮仈鏈哄府鍔╅棶涓栥?/p> 鍦ㄨ瀵熶華琛ㄥ寲榪愯鐨勨淔unction鈥濊鍥炬椂錛屾垜娣誨姞浜嗚繖浜涘垪浠ユ煡鐪嬪悇縐嶈鏃剁殑鐧懼垎姣斿鹼紝縐婚櫎鍘熷鏁板瓧鏃墮棿鍒楋紝騫朵笖娣誨姞浜嗕袱涓漿鎹㈠垪銆傝繖涓烘垜鎻愪緵浜嗘湁鍏寵榪愯鐨勬洿娓呮櫚瑙嗗浘銆傛垜鍦ㄦ帓搴忔椂鎵渚濇嵁鐨勭涓涓垪鏄? Application Exclusive Time鈥濓紝鍥犱負鎴戝笇鏈涚湅鍒板摢涓嚱鏁版鍦ㄥ畬鎴愬ぇ閮ㄥ垎宸ヤ綔銆傜敱浜庝華琛ㄥ寲鍦ㄦ柟娉曡繘琛岀殑鎵鏈夊瓙璋冪敤鍛ㄥ洿鏀懼叆浜嗘帰嫻嬶紝鎵浠ユ偍瀹屽叏鏈夊彲鑳藉湪璇ュ垪琛ㄧ殑欏墮儴鐪嬪埌妗嗘灦綾誨簱鎴栨搷浣滅郴緇熴傚疄闄呬笂錛屽浜庢垜鐨?Animated Algorithm 榪愯錛孲ystem.Drawing.SolidBrush.ctor 鍜?System.Drawing.Brush.Dispose 鍦?Application Exclusive Time 鐧懼垎姣斾腑琚垪涓虹涓鍜岀浜岋紝鍏剁櫨鍒嗘瘮鍒嗗埆涓?14.982% 鍜?14.867%銆傛垜緙栧啓鐨勭涓涓嚱鏁版槸浣嶄簬絎笁浣嶇殑 Bugslayer.SortDisplayGraph.SorterGraph.UpdateSingleFixedElement錛堝叾鐧懼垎姣斾負 12.217%錛夛紝瀹冨湪鍥懼艦涓粯鍒跺崟鐙殑鏉°傛牴鎹簲鐢ㄧ▼搴忕被鍨嬬殑涓嶅悓錛屾垜鍦ㄦ煡鐪嬧淔unction鈥濊鍥炬椂鍙兘浼氶夋嫨鎸夊叾浠栧垪鎺掑簭銆傚鏋滃瓨鍦?Web 鏈嶅姟鎴栨暟鎹簱璋冪敤錛屽垯鎴戝皢鏌ョ湅 % Elapsed Inclusive Time錛屼互渚垮彲浠ョ湅鍒版槸鍚︽湁鐗瑰畾鏂規硶鍗峰叆鍒伴暱鏃墮棿闃誨涓傚浜庡儚 Animated Algorithm 榪欐牱鐨勫簲鐢ㄧ▼搴忥紝鎴戣繕灝嗘煡鐪?Application Inclusive Time 鐨勭櫨鍒嗘瘮銆?/p> 鍩轟簬鎴戠殑浠〃鍖栬繍琛屼腑鐨勪笂榪版暟瀛楋紝鎴戝緢鎯蟲煡鏄庢槸璋佸湪瀵?SolidBrush 鏂規硶榪涜榪欎簺璋冪敤錛屽洜姝ゆ垜鍙抽敭鍗曞嚮 .ctor 鏂規硶騫墮夋嫨鈥淪how in Caller/Callee鈥濊鍥撅紝浠ヤ究鏌ョ湅鏄皝鍦ㄨ皟鐢ㄨ鏂規硶銆傝瑙嗗浘錛堝畠瀵逛簬閲囨牱鍒嗘瀽涔熷彲鐢級浣挎偍涓鐪煎氨鍙互鐪嬪嚭鐩爣鏂規硶鐨勬墍鏈夎皟鐢ㄦ柟錛屼互鍙婅鐩爣鏂規硶璋冪敤鐨勬墍鏈夋柟娉曘?/p> 鍥犱負 .ctor 鏂規硶娌℃湁浠〃鍖栵紝鎵浠モ淐aller/Callee鈥濊鍥懼皢涓嶄細鏄劇ず浠諱綍琚皟鐢ㄦ柟錛屼絾鏄畠鏄劇劧浼氭樉紺鴻皟鐢ㄦ柟銆傛垜鍙屽嚮浜嗚繖涓敮涓鐨勮皟鐢ㄦ柟錛屽畠鎭板ソ鏄叿鏈夌涓夐珮 Application Exclusive Time 騫跺叿鏈?a target="_blank">鍥?7 鎵紺鴻鍥劇殑 UpdateSingleFixedElement 鏂規硶銆?/p> 鍦?a target="_blank">鍥?7 涓紝浣嶄簬瑙嗗浘涓儴鐨勪笅鎷夌粍鍚堟鏄洰鏍囨柟娉曪紙鍦ㄦ湰渚嬩腑涓?UpdateSingleFixedElement錛夈傛柟娉曚笂鏂圭殑緗戞牸鍖呭惈浜嗙洰鏍囨柟娉曠殑鎵鏈夎皟鐢ㄦ柟錛堣皟鐢ㄦ柟錛夈傜洰鏍囨柟娉曚笅鏂圭殑緗戞牸鍖呭惈浜嗙洰鏍囨柟娉曡皟鐢ㄤ互瀹屾垚鍏跺伐浣滅殑鎵鏈夋柟娉曪紙琚皟鐢ㄦ柟錛夈傚鏋滄偍甯屾湜鏌ョ湅鏄皝璋冪敤浜嗙壒瀹氳皟鐢ㄦ柟錛岃鍙屽嚮璇ヨ皟鐢ㄦ柟鏂規硶錛岃鏂規硶灝嗗彉涓虹洰鏍囨柟娉曪紝騫朵笖鎮ㄥ皢鐪嬪埌鍘熷鐩爣鏂規硶涓嬮檷鍒拌璋冪敤鏂歸儴鍒嗕腑銆傚疄璐ㄤ笂錛屾偍鍙槸灝嗗爢鏍堥亶鍘嗕簡涓閬嶃?/p> 浠呬粎鍩轟簬鍥?7 涓殑瑙嗗浘錛屾偍灝卞彲浠ヨ鯨鍒嚭娼滃湪鐨勬ц兘闂銆侫nimated Algorithm 浼間箮涓嶅叿鏈変換浣曠獊鍑虹殑鎬ц兘闂錛屼絾鏄?SolidBrush .ctor 鍜?Dispose 鍗犵敤浜嗗姝ゅ鐨勬椂闂村茍涓旈兘鍦?UpdateSingleFixedElement 鏂規硶鍐呴儴璋冪敤錛堣皟鐢ㄤ簡 351,872 嬈★級錛岃繖涓簨瀹炶〃鏄庢垜鍋氫簡涓浠舵剼锠㈢殑浜嬫儏 鈥?鎴戞瘡嬈¢兘閫氳繃璇ュ嚱鏁板垱寤虹敾絎旓紝鑰屽疄闄呬笂搴旇灝嗗叾緙撳瓨銆傚綋鎴戝湪灝嗘潵鐨勬煇涓鏈?MSDN Magazine 涓紑濮嬬敤 EPT 鍒嗘瀽浠g爜鏃訛紝鎮ㄨ繕灝嗙湅鍒?Animated Algorithm 鐨勫叾浠栦竴浜涢棶棰樸?/p> 鏁版嵁鐨勬渶鍚庝竴涓父鐢ㄨ鍥炬槸鈥淐allstack鈥濊鍥俱傚湪榪欓噷錛屾偍鍙互閫氳繃鏇村叿灞傛鎬х殑鏂瑰紡鐪嬪埌鎮ㄥ湪鈥淐aller/Callee鈥濈獥鍙d腑瑙傚療鍒扮殑璋冪敤鍫嗘爤銆傚浜庨噰鏍瘋繍琛岋紝鎮ㄥ皢鍦ㄢ淐allstack鈥濊鍥劇殑欏跺眰鐪嬪埌寰堝鐨勬潯鐩紝鍥犱負榪欎簺鏉$洰涓殑姣忎竴涓兘浠h〃涓涓寘鍚嫭鍗犳牱鏈殑鍞竴鐐廣傚綋鎮ㄥ湪閲囨牱榪愯涓睍寮欏規椂錛屾偍榪樺皢鐪嬪埌錛屽湪鐩稿悓綰у埆鍋跺皵浼氬瓨鍦ㄤ竴浜涢」錛岃繖浜涢」鎸囩ず浣嶄簬鏍歸儴鐨勫嚱鏁板叿鏈夊涓紩鍚戝畠鐨勮皟鐢ㄦ爲銆傛牴浣嶇疆涓樉紺虹殑欏規槸鏍堥《銆?/p> 瀵逛簬浠〃鍖栬繍琛岋紝鈥淐allstack鈥濈獥鍙e皢鍏鋒湁涓庡簲鐢ㄧ▼搴忎腑鐨勬瘡涓嚎紼嬬浉瀵瑰簲鐨勬牴鍏冪礌銆傚洜涓?Animated Algorithm 鍙湁涓や釜綰跨▼錛屾墍浠ユ偍鍙兘鍦ㄦ爲鏍圭駭鍒湅鍒頒袱涓」銆傚湪鈥淐allstack鈥濊鍥句腑錛屾偍鍙互鐪嬪埌緇濆璋冪敤鍫嗘爤錛堜粠浠〃鍖栫殑絎竴涓柟娉曞悜涓嬪埌鏈鍚庝竴涓柟娉曪級錛屽洜姝ゆ偍鍙互鐪熸浜嗚В搴旂敤紼嬪簭鐨勬墽琛屾柟寮忋傛垜宸茬粡鏈夊緢澶氭瀵規垜璁や負浠g爜鎵瀹屾垚鐨勫伐浣滃拰浠g爜瀹為檯涓婂畬鎴愮殑宸ヤ綔涔嬮棿鐨勫樊寮傛劅鍒板悆鎯娿?/p> 鎮ㄥ彲浠ヨ姳璐瑰ぇ閲忔椂闂村湪鈥淐allstack鈥濈獥鍙d腑鍒嗘瀽浠g爜銆傚綋閫氳繃搴旂敤紼嬪簭瑙傚療鐗瑰畾鐨勮釜榪規椂錛屾偍鍙互閫氳繃閫夋嫨鎰熷叴瓚g殑鐗瑰畾鑺傜偣錛屽悜涓嬬Щ鍔紝鍙抽敭鍗曞嚮錛屽茍閫夋嫨鈥淪et Root鈥濊彍鍗曢夐」錛屾潵娑堥櫎澶ч噺鍣煶銆傚湪鍥?8 涓紝鎴戝笇鏈涙煡鐪?NSort.SwapSorter.Sort 榪涜鐨勬墍鏈夎皟鐢紝鍥犳灝嗗畠璁劇疆涓烘牴鍙互娑堥櫎 UI 綰跨▼鐨勫獎鍝嶃?/p> 鍦ㄥ皢鏉ョ殑鏌愪竴鏈熶腑錛屾垜灝嗘洿璇︾粏鍦拌璁?EPT 鏄劇ず鍖哄煙涓殑鏈鍚庝袱涓夐」鍗★細鈥淭race鈥濆拰鈥淭ype鈥濄傚湪鈥淭ype鈥濊鍥句腑錛屾偍鍙互瑙傚療宸茬粡鍦ㄥ簲鐢ㄧ▼搴忎腑鍒嗛厤鐨勫璞°傚畠鍦ㄦ祴璇曠増涓湁鏁堛傚綋鎴戝湪鍓嶉潰璁ㄨ鎬ц兘浼氳瘽灞炴ф椂錛屾垜鎻愬埌榪囧湪鈥淕eneral鈥濋夐」鍗′笂鏈変竴涓淢anaged Allocation Profiling鈥濋儴鍒嗐傚鏋滄偍閫夋嫨鈥淎llocations-only鈥濆崟閫夋寜閽紝鍒?EPT 浼氬~鍏呪淭ype鈥濊鍥俱傚湪嫻嬭瘯鐗堜腑錛屾姤鍛婄湅璧鋒潵綾諱技浜庡叾浠栬澶氬伐鍏蜂腑鐨勬姤鍛婏紝浣嗘槸鏁版嵁鏀墮泦浼間箮涓嶅儚鍦ㄥ叾浠栧伐鍏蜂腑閭f牱鍏鋒湁濡傛涔嬪鐨勭郴緇熷紑閿銆傛渶鍚庯紝瑕佷簡瑙?Enterprise Performance Tool 鍥㈤槦鐨勬兂娉曚互鍙婃湁鍏寵宸ュ叿鐨勬洿澶氫俊鎭紝璇風‘淇濆湪 blogs.msdn.com/profiler 鏌ョ湅浠栦滑鐨勭綉緇滄棩璁般?/p> John Robbins 鏄?Wintellect 鐨勫垱濮嬩漢涔嬩竴錛岃鍏徃鏄竴瀹朵笓闂ㄨ嚧鍔涗簬 Windows 鍜?.NET Framework 鐨勮蔣浠跺挩璇€佹暀鑲插拰寮鍙戝叕鍙搞備粬鐨勬渶鏂拌憲浣滄槸鈥淒ebugging Applications for Microsoft .NET and Microsoft Windows鈥?Microsoft Press, 2003)銆傝鑱旂郴 John錛岃璁塊棶 www.wintellect.com銆?/p> 涓銆佸啋娉℃帓搴?Bubble) using System; namespace BubbleSorter public class MainClass 浜屻侀夋嫨鎺掑簭(Selection) using System; namespace SelectionSorter public class MainClass 涓夈佹彃鍏ユ帓搴?InsertionSorter) using System; namespace InsertionSorter public class MainClass 鍥涖佸笇灝旀帓搴?ShellSorter) using System; namespace ShellSorter public class MainClass
涓枃:http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/enterpriseperformance.mspx?mfr=true鈥?/td> 鈥?/td> 鈥?/td>
EnterprisePerformance.exe (258KB)
鍒嗘瀽鍣ㄧ殑鍩烘湰鍘熺悊
Enterprise Performance Tool 鐨勫熀鏈師鐞?/p>
Animated Algorithm
EPT 鍏ラ棬
鏌ョ湅鍒嗘瀽鍣ㄦ暟鎹?/p>
]]>
]]>
C#鎺掑簭綆楁硶澶у叏
鍦熶漢
2004-7-21
{
public class BubbleSorter
{
public void Sort(int[] list)
{
int i,j,temp;
bool done=false;
j=1;
while((j<list.Length)&&(!done))
{
done=true;
for(i=0;i<list.Length-j;i++)
{
if(list[i]>list[i+1])
{
done=false;
temp=list[i];
list[i]=list[i+1];
list[i+1]=temp;
}
}
j++;
}
}
}
{
public static void Main()
{
int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
BubbleSorter sh=new BubbleSorter();
sh.Sort(iArrary);
for(int m=0;m<iArrary.Length;m++)
Console.Write("{0} ",iArrary[m]);
Console.WriteLine();
}
}
}
{
public class SelectionSorter
{
private int min;
public void Sort(int [] list)
{
for(int i=0;i<list.Length-1;i++)
{
min=i;
for(int j=i+1;j<list.Length;j++)
{
if(list[j]<list[min])
min=j;
}
int t=list[min];
list[min]=list[i];
list[i]=t;
}
}
}
{
public static void Main()
{
int[] iArrary = new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
SelectionSorter ss=new SelectionSorter();
ss.Sort(iArrary);
for (int m=0;m<iArrary.Length;m++)
Console.Write("{0} ",iArrary[m]);
Console.WriteLine();
}
}
}
{
public class InsertionSorter
{
public void Sort(int [] list)
{
for(int i=1;i<list.Length;i++)
{
int t=list[i];
int j=i;
while((j>0)&&(list[j-1]>t))
{
list[j]=list[j-1];
--j;
}
list[j]=t;
}
}
}
{
public static void Main()
{
int[] iArrary=new int[]{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
InsertionSorter ii=new InsertionSorter();
ii.Sort(iArrary);
for(int m=0;m<iArrary.Length;m++)
Console.Write("{0}",iArrary[m]);
Console.WriteLine();
}
}
}
{
public class ShellSorter
{
public void Sort(int [] list)
{
int inc;
for(inc=1;inc<=list.Length/9;inc=3*inc+1);
for(;inc>0;inc/=3)
{
for(int i=inc+1;i<=list.Length;i+=inc)
{
int t=list[i-1];
int j=i;
while((j>inc)&&(list[j-inc-1]>t))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=t;
}
}
}
}
{
public static void Main()
{
int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
ShellSorter sh=new ShellSorter();
sh.Sort(iArrary);
for(int m=0;m<iArrary.Length;m++)
Console.Write("{0} ",iArrary[m]);
Console.WriteLine();
}
}
}
]]>
]]>
鏈枃鏄?鑰冨療鏁版嵁緇撴瀯"緋誨垪鏂囩珷鐨勭浜岄儴鍒嗭紝鑰冨療浜嗕笁縐嶇爺絀跺緱鏈澶氱殑鏁版嵁緇撴瀯錛氶槦鍒楋紙Queue)錛屽爢鏍堬紙Stack)鍜屽搱甯岃〃錛圚ashtable)銆傛濡傛垜浠墍鐭ワ紝Quenu鍜孲tack鍏跺疄涓縐嶇壒孌婄殑ArrayList錛屾彁渚涘ぇ閲忎笉鍚岀被鍨嬬殑鏁版嵁瀵硅薄鐨勫瓨鍌紝鍙笉榪囪闂繖浜涘厓绱犵殑欏哄簭鍙楀埌浜嗛檺鍒躲侶ashtable鍒欐彁渚涗簡涓縐嶇被鏁扮粍錛坅rray-like)鐨勬暟鎹娊璞★紝瀹冨叿鏈夋洿鐏墊椿鐨勭儲寮曡闂傛暟緇勯渶瑕侀氳繃搴忔暟榪涜绱㈠紩錛岃孒ashtable鍏佽閫氳繃浠諱綍涓縐嶅璞$儲寮曟暟鎹」銆?/P>
鐩綍錛?/P>
綆浠?/P>
鈥滄帓闃熼『搴忊濈殑宸ヤ綔榪涚▼
鈥滃弽鎺掗槦欏哄簭鈥濃斺斿爢鏍堟暟鎹粨鏋?/P>
搴忔暟绱㈠紩闄愬埗
System.Collections.Hashtable綾?/P>
緇撹
綆浠?/P>
鍦ㄧ涓閮ㄥ垎涓紝鎴戜滑浜嗚В浜嗕粈涔堟槸鏁版嵁緇撴瀯錛岃瘎浼頒簡瀹冧滑鍚勮嚜鐨勬ц兘錛屽茍浜嗚В浜嗛夋嫨浣曠鏁版嵁緇撴瀯瀵圭壒瀹氱畻娉曠殑褰卞搷銆傚彟澶栨垜浠繕浜嗚В騫跺垎鏋愪簡鏁版嵁緇撴瀯鐨勫熀紜鐭ヨ瘑錛屼粙緇嶄簡涓縐嶆渶甯哥敤鐨勬暟鎹粨鏋勶細鏁扮粍銆?/P>
鏁扮粍瀛樺偍浜嗗悓涓綾誨瀷鐨勬暟鎹紝騫墮氳繃搴忔暟榪涜绱㈠紩銆傛暟緇勫疄闄呯殑鍊兼槸瀛樺偍鍦ㄤ竴孌佃繛緇殑鍐呭瓨絀洪棿涓紝鍥犳璇誨啓鏁扮粍涓壒瀹氱殑鍏冪礌闈炲父榪呴熴?/P>
鍥犲叾鍏鋒湁鐨勫悓鏋勬у強瀹氶暱鎬э紝.Net Framework鍩虹被搴撴彁渚涗簡ArrayList鏁版嵁緇撴瀯錛屽畠鍙互瀛樺偍涓嶅悓綾誨瀷鐨勬暟鎹紝騫朵笖涓嶉渶瑕佹樉寮忓湴鎸囧畾闀垮害銆傚墠鏂囨墍榪幫紝ArrayList鏈川涓婃槸瀛樺偍object綾誨瀷鐨勬暟緇勶紝姣忔璋冪敤Add()鏂規硶澧炲姞鍏冪礌錛屽唴閮ㄧ殑object鏁扮粍閮借媯鏌ヨ竟鐣岋紝濡傛灉瓚呭嚭錛屾暟緇勪細鑷姩浠ュ嶆暟澧炲姞鍏墮暱搴︺?/P>
絎簩閮ㄥ垎錛屾垜浠皢緇х畫鑰冨療涓ょ綾繪暟緇勭粨鏋勶細Queue鍜孲tack銆傚拰ArrayList鐩鎬技錛屼粬浠篃鏄竴孌電浉閭葷殑鍐呭瓨鍧椾互瀛樺偍涓嶅悓綾誨瀷鐨勫厓绱狅紝鐒惰屽湪璁塊棶鏁版嵁鏃訛紝浼氬彈鍒頒竴瀹氱殑闄愬埗銆?/P>
涔嬪悗錛屾垜浠繕灝嗘繁鍏ヤ簡瑙ashtable鏁版嵁緇撴瀯銆傛湁鏃朵警錛屾垜浠彲浠ユ妸Hashtable鐪嬩綔鏉涓縐嶅叧鑱旀暟緇勶紙associative array)錛屽畠鍚屾牱鏄瓨鍌ㄤ笉鍚岀被鍨嬪厓绱犵殑闆嗗悎錛屼絾瀹冨彲閫氳繃浠繪剰瀵硅薄錛堜緥濡俿tring)鏉ヨ繘琛岀儲寮曪紝鑰岄潪鍥哄畾鐨勫簭鏁般?/P>
鈥滄帓闃熼『搴忊濈殑宸ヤ綔榪涚▼
濡傛灉浣犺鍒涘緩涓嶅悓鐨勬湇鍔★紝榪欑鏈嶅姟涔熷氨鏄氳繃澶氱璧勬簮浠ュ搷搴斿縐嶈姹傜殑紼嬪簭錛涢偅涔堝綋澶勭悊榪欎簺璇鋒眰鏃訛紝濡備綍鍐沖畾鍏跺搷搴旂殑欏哄簭灝辨垚浜嗗垱寤烘湇鍔$殑涓澶ч毦棰樸傞氬父瑙e喅鐨勬柟妗堟湁涓ょ錛?/P>
鈥滄帓闃熼『搴忊濆師鍒?/P>
鈥滃熀浜庝紭鍏堢瓑綰р濈殑澶勭悊鍘熷垯
褰撲綘鍦ㄥ晢搴楄喘鐗┿侀摱琛屽彇嬈劇殑鏃跺欙紝浣犻渶瑕佹帓闃熺瓑寰呮湇鍔°傗滄帓闃熼『搴忊濆師鍒欒瀹氭帓鍦ㄥ墠闈㈢殑姣斿悗闈㈢殑鏇存棭浜彈鏈嶅姟銆傝屸滃熀浜庝紭鍏堢瓑綰р濆師鍒欙紝鍒欐牴鎹叾浼樺厛絳夌駭鐨勯珮浣庡喅瀹氭湇鍔¢『搴忋備緥濡傚湪鍖婚櫌鐨勬ヨ瘖瀹わ紝鐢熷懡鍨傚嵄鐨勭梾浜轟細姣旂梾鎯呰交鐨勬洿鍏堟帴鍙楀尰鐢熺殑璇婃柇錛岃屼笉鐢ㄧ鏄皝鍏堝埌鐨勩?/P>
璁炬兂浣犻渶瑕佹瀯寤轟竴涓湇鍔℃潵澶勭悊璁$畻鏈烘墍鎺ュ彈鍒扮殑璇鋒眰錛岀敱浜庢敹鍒扮殑璇鋒眰榪滆繙瓚呰繃璁$畻鏈哄鐞嗙殑閫熷害錛屽洜姝や綘闇瑕佸皢榪欎簺璇鋒眰鎸夌収浠栦滑閫掍氦鐨勯『搴忎緷姝ゆ斁鍏ュ埌緙撳啿鍖轟腑銆?/P>
涓縐嶆柟妗堟槸浣跨敤ArrayList錛岄氳繃縐頒負nextJobPos鐨勬暣鍨嬪彉閲忔潵鎸囧畾灝嗚鎵ц鐨勪換鍔″湪鏁扮粍涓殑浣嶇疆銆傚綋鏂扮殑宸ヤ綔璇鋒眰榪涘叆錛屾垜浠氨綆鍗曚嬌鐢ˋrrayList鐨凙dd()鏂規硶灝嗗叾娣誨姞鍒癆rrayList鐨勬湯绔傚綋浣犲噯澶囧鐞嗙紦鍐插尯鐨勪換鍔℃椂錛屽氨閫氳繃nextJobPos寰楀埌璇ヤ換鍔″湪ArrayList鐨勪綅緗間互鑾峰彇璇ヤ換鍔★紝鍚屾椂灝唍extJobPos绱姞1銆備笅闈㈢殑紼嬪簭瀹炵幇璇ョ畻娉曪細
using System;
using System.Collections;
public class JobProcessing
{
private static ArrayList jobs = new ArrayList();
private static int nextJobPos = 0;
public static void AddJob(string jobName)
{
jobs.Add(jobName);
}
public static string GetNextJob()
{
if (nextJobPos > jobs.Count - 1)
return "NO JOBS IN BUFFER";
else
{
string jobName = (string) jobs[nextJobPos];
nextJobPos++;
return jobName;
}
}
public static void Main()
{
AddJob("1");
AddJob("2");
Console.WriteLine(GetNextJob());
AddJob("3");
Console.WriteLine(GetNextJob());
Console.WriteLine(GetNextJob());
Console.WriteLine(GetNextJob());
Console.WriteLine(GetNextJob());
AddJob("4");
AddJob("5");
Console.WriteLine(GetNextJob());
}
}
杈撳嚭緇撴灉濡備笅錛?/P>
1
2
3
NO JOBS IN BUFFER
NO JOBS IN BUFFER
4
榪欑鏂規硶綆鍗曟槗鎳傦紝浣嗘晥鐜囧嵈鍙曞緱闅句互鎺ュ彈銆傚洜涓猴紝鍗充嬌鏄換鍔¤娣誨姞鍒癰uffer涓悗绔嬪嵆琚鐞嗭紝ArrayList鐨勯暱搴︿粛鐒朵細闅忕潃娣誨姞鍒癰uffer涓殑浠誨姟鑰屼笉鏂鍔犮傚亣璁炬垜浠粠緙撳啿鍖烘坊鍔犲茍縐婚櫎涓涓換鍔¢渶瑕佷竴縐掗挓錛岃繖鎰忓懗涓縐掗挓鍐呮瘡璋冪敤AddJob()鏂規硶錛屽氨瑕佽皟鐢ㄤ竴嬈rrayList鐨凙dd()鏂規硶銆傞殢鐫Add()鏂規硶鎸佺畫涓嶆柇鐨勮璋冪敤錛孉rrayList鍐呴儴鏁扮粍闀垮害灝變細鏍規嵁闇姹傛寔緇笉鏂殑鎴愬嶅闀褲備簲鍒嗛挓鍚庯紝ArrayList鐨勫唴閮ㄦ暟緇勫鍔犲埌浜?12涓厓绱犵殑闀垮害錛岃繖鏃剁紦鍐插尯涓嵈鍙湁涓嶅埌涓涓換鍔¤屽凡銆傜収榪欐牱鐨勮秼鍔垮彂灞曪紝鍙紼嬪簭緇х畫榪愯錛屽伐浣滀換鍔$戶緇繘鍏ワ紝ArrayList鐨勯暱搴﹁嚜鐒朵細緇х畫澧為暱銆?/P>
鍑虹幇濡傛鑽掕艾鍙瑧鐨勭粨鏋滐紝鍘熷洜鏄凡琚鐞嗚繃鐨勬棫浠誨姟鍦ㄧ紦鍐插尯涓殑絀洪棿娌℃湁琚洖鏀躲備篃鍗蟲槸璇達紝褰撶涓涓換鍔¤娣誨姞鍒扮紦鍐插尯騫惰澶勭悊鍚庯紝姝ゆ椂ArrayList鐨勭涓鍏冪礌絀洪棿搴旇琚啀鍒╃敤銆傛兂鎯充笂榪頒唬鐮佺殑宸ヤ綔嫻佺▼錛屽綋鎻掑叆涓や釜宸ヤ綔鈥斺擜ddJob("1")鍜孉ddJob("2")鍚庘斺擜rrayList鐨勭┖闂村鍥句竴鎵紺猴細
鍥句竴錛氭墽琛屽墠涓よ浠g爜鍚庣殑ArrayList
娉ㄦ剰榪欓噷鐨凙rrayList鍏辨湁16涓厓绱狅紝鍥犱負ArrayList鍒濆鍖栨椂榛樿鐨勯暱搴︿負16銆傛帴涓嬫潵錛岃皟鐢℅etNextJob()鏂規硶錛岀Щ璧扮涓涓換鍔★紝緇撴灉濡傚浘浜岋細
鍥句簩錛氳皟鐢℅etNextJob()鏂規硶鍚庣殑ArrayList
褰撴墽琛孉ddJob(鈥?鈥?鏃訛紝鎴戜滑闇瑕佹坊鍔犳柊浠誨姟鍒扮紦鍐插尯銆傛樉鐒訛紝ArrayList鐨勭涓鍏冪礌絀洪棿錛堢儲寮曚負0錛夎閲嶆柊浣跨敤錛屾鏃跺湪0绱㈠紩澶勬斁鍏ヤ簡絎笁涓換鍔°備笉榪囧埆蹇樹簡錛屽綋鎴戜滑鎵ц浜咥ddJob(鈥?鈥?鍚庤繕鎵ц浜咥ddJob(鈥?鈥?錛岀揣鎺ョ潃鐢ㄨ皟鐢ㄤ簡涓ゆGetNextJob()鏂規硶銆傚鏋滄垜浠妸絎笁涓換鍔℃斁鍒?绱㈠紩澶勶紝鍒欑鍥涗釜浠誨姟浼氳鏀懼埌绱㈠紩2澶勶紝闂鍙戠敓浜嗐傚鍥句笁錛?IMG height=136 src="http://wayfarer.cnblogs.com/images/cnblogs_com/wayfarer/2-3.gif" width=450 border=0>
鍥句笁錛氬皢浠誨姟鏀懼埌0绱㈠紩鏃訛紝闂鍙戠敓
鐜板湪璋冪敤GetNextJob()錛岀浜屼釜浠誨姟浠庣紦鍐蹭腑縐昏蛋錛宯extJobPos鎸囬拡鎸囧悜绱㈠紩2銆傚洜姝わ紝褰撳啀涓嬈¤皟鐢℅etNextJob()鏃訛紝絎洓涓換鍔′細鍏堜簬絎笁涓縐昏蛋錛岃繖灝辨湁鎮栦簬涓庢垜浠殑鈥滄帓搴忛『搴忊濆師鍒欍?/P>
闂鍙戠敓鐨勭棁緇撳湪浜嶢rrayList鏄互綰垮艦欏哄簭浣撶幇浠誨姟鍒楄〃鐨勩傚洜姝ゆ垜浠渶瑕佸皢鏂頒換鍔℃坊鍔犲埌灝變換鍔$殑鍙蟲伝浠ヤ繚璇佸綋鍓嶇殑澶勭悊欏哄簭鏄紜殑銆備笉綆′綍鏃跺埌杈続rrayList鐨勬湯绔紝ArrayList閮戒細鎴愬嶅闀褲傚鏋滀駭鐢熶駭鐢熸湭琚嬌鐢ㄧ殑鍏冪礌錛屽垯鏄洜涓鴻皟鐢ㄤ簡GetNextJob()鏂規硶銆?/P>
瑙e喅涔嬮亾鏄嬌鎴戜滑鐨凙rrayList鎴愮幆褰€傜幆褰㈡暟緇勬病鏈夊浐瀹氱殑璧風偣鍜岀粓鐐廣傚湪鏁扮粍涓紝鎴戜滑鐢ㄥ彉閲忔潵緇存姢鏁扮粍鐨勮搗姝㈢偣銆傜幆褰㈡暟緇勫鍥懼洓鎵紺猴細
鍥懼洓錛氱幆褰㈡暟緇勫浘紺?/P>
鍦ㄧ幆褰㈡暟緇勪腑錛孉ddJob()鏂規硶娣誨姞鏂頒換鍔″埌绱㈠紩endPos澶勶紙璇戞敞錛歟ndPos涓鑸О涓哄熬鎸囬拡錛夛紝涔嬪悗鈥滈掑鈥漞ndPos鍊箋侴etNextJob()鏂規硶鍒欐牴鎹ご鎸囬拡startPos鑾峰彇浠誨姟錛屽茍灝嗗ご鎸囬拡鎸囧悜null錛屼笖鈥滈掑鈥漵tartPos鍊箋傛垜涔嬫墍浠ユ妸鈥滈掑鈥濅袱瀛楀姞涓婂紩鍙鳳紝鏄洜涓鴻繖閲屾墍璇寸殑鈥滈掑鈥濅笉浠呬粎鏄皢鍙橀噺鍊煎姞1閭d箞綆鍗曘備負浠涔堟垜浠笉鑳界畝鍗曞湴鍔?鍛紵璇瘋冭檻榪欎釜渚嬪瓙錛氬綋endPos絳変簬15鏃訛紝濡傛灉endPos鍔?錛屽垯endPos絳変簬16銆傛鏃惰皟鐢ˋddJob()錛屽畠璇曞浘鍘昏闂儲寮曚負16鐨勫厓绱狅紝緇撴灉鍑虹幇寮傚父IndexOutofRangeException銆?/P>
浜嬪疄涓婏紝褰揺ndPos絳変簬15鏃訛紝搴斿皢endPos閲嶇疆涓?銆傞氳繃閫掑錛坕ncrement錛夊姛鑳芥鏌ュ鏋滀紶閫掔殑鍙橀噺鍊肩瓑浜庢暟緇勯暱搴︼紝鍒欓噸緗負0銆傝В鍐蟲柟妗堟槸灝嗗彉閲忓煎鏁扮粍闀垮害鍊兼眰妯★紙鍙栦綑錛夛紝increment()鏂規硶鐨勪唬鐮佸涓嬶細
int increment(int variable)
{
return (variable + 1) % theArray.Length;
}
娉細鍙栨ā鎿嶄綔絎︼紝濡倄 % y錛屽緱鍒扮殑鏄痻 闄や互 y鍚庣殑浣欐暟銆備綑鏁版繪槸鍦? 鍒?y-1涔嬮棿銆?/P>
榪欑鏂規硶濂藉灝辨槸緙撳啿鍖烘案榪滀笉浼氳秴榪?6涓厓绱犵┖闂淬備絾鏄鏋滄垜浠娣誨姞瓚呰繃16涓厓绱犵┖闂寸殑鏂頒換鍔″憿錛熷氨璞rrayList鐨凙dd()鏂規硶涓鏍鳳紝鎴戜滑闇瑕佹彁渚涚幆褰㈡暟緇勮嚜澧為暱鐨勮兘鍔涳紝浠ュ嶆暟澧為暱鏁扮粍鐨勯暱搴︺?/P>
System.Collection.Queue綾?/P>
灝辮薄鎴戜滑鍒氭墠鎻忚堪鐨勯偅鏍鳳紝鎴戜滑闇瑕佹彁渚涗竴縐嶆暟鎹粨鏋勶紝鑳藉鎸夌収鈥滄帓闃熼『搴忊濈殑鍘熷垯鎻掑叆鍜岀Щ闄ゅ厓绱犻」錛屽茍鑳芥渶澶у寲鐨勫埄鐢ㄥ唴瀛樼┖闂達紝絳旀灝辨槸浣跨敤鏁版嵁緇撴瀯Queue銆傚湪.Net Framework鍩虹被搴撲腑宸茬粡鍐呭緩浜嗚綾燴斺擲ystem.Collections.Queue綾匯傚氨璞℃垜浠唬鐮佷腑鐨凙ddJob()鍜孏etNextJob()鏂規硶錛孮ueue綾繪彁渚涗簡Enqueue()鍜孌equeue()鏂規硶鍒嗗埆瀹炵幇鍚屾牱鐨勫姛鑳姐?/P>
Queue綾誨湪鍐呴儴寤虹珛浜嗕竴涓瓨鏀緊bject瀵硅薄鐨勭幆褰㈡暟緇勶紝騫墮氳繃head鍜宼ail鍙橀噺鎸囨兂璇ユ暟緇勭殑澶村拰灝俱傞粯璁ょ姸鎬佷笅錛孮ueue鍒濆鍖栫殑瀹歸噺涓?2錛屾垜浠篃鍙互閫氳繃鍏舵瀯閫犲嚱鏁拌嚜瀹氫箟瀹歸噺銆傛棦鐒禥ueue鍐呭緩鐨勬槸object鏁扮粍錛屽洜姝ゅ彲浠ュ皢浠諱綍綾誨瀷鐨勫厓绱犳斁鍏ラ槦鍒椾腑銆?/P>
Enqueue錛堬級鏂規硶棣栧厛鍒ゆ柇queue涓槸鍚︽湁瓚沖瀹歸噺瀛樻斁鏂板厓绱犮傚鏋滄湁錛屽垯鐩存帴娣誨姞鍏冪礌錛屽茍浣跨儲寮晅ail閫掑銆傚湪榪欓噷tail浣跨敤姹傛ā鎿嶄綔浠ヤ繚璇乼ail涓嶄細瓚呰繃鏁扮粍闀垮害銆傚鏋滅┖闂翠笉澶燂紝鍒檘ueue鏍規嵁鐗瑰畾鐨勫闀垮洜瀛愭墿鍏呮暟緇勫閲忋傚闀垮洜瀛愰粯璁ゅ間負2.0錛屾墍浠ュ唴閮ㄦ暟緇勭殑闀垮害浼氬鍔犱竴鍊嶃傚綋鐒朵綘涔熷彲浠ュ湪鏋勯犲嚱鏁頒腑鑷畾涔夎澧為暱鍥犲瓙銆?/P>
Dequeue()鏂規硶鏍規嵁head绱㈠紩榪斿洖褰撳墠鍏冪礌銆備箣鍚庡皢head绱㈠紩鎸囧悜null錛屽啀鈥滈掑鈥漢ead鐨勫箋備篃璁鎬綘鍙兂鐭ラ亾褰撳墠澶村厓绱犵殑鍊鹼紝鑰屼笉浣垮叾杈撳嚭闃熷垪錛坉equeue錛屽嚭鍒楋級錛屽垯Queue綾繪彁渚涗簡Peek()鏂規硶銆?/P>
Queue騫朵笉璞rrayList閭f牱鍙互闅忔満璁塊棶錛岃繖涓鐐歸潪甯擱噸瑕併備篃灝辨槸璇達紝鍦ㄦ病鏈変嬌鍓嶄袱涓厓绱犲嚭鍒椾箣鍓嶏紝鎴戜滑涓嶈兘鐩存帴璁塊棶絎笁涓厓绱犮傦紙褰撶劧錛孮ueue綾繪彁渚涗簡Contains()鏂規硶錛屽畠鍙互浣夸綘鍒ゆ柇鐗瑰畾鐨勫兼槸鍚﹀瓨鍦ㄩ槦鍒椾腑銆傦級濡傛灉浣犳兂闅忔満鐨勮闂暟鎹紝閭d箞浣犲氨涓嶈兘浣跨敤Queue榪欑鏁版嵁緇撴瀯錛岃屽彧鑳界敤ArrayList銆俀ueue鏈閫傚悎榪欑鎯呭喌錛屽氨鏄綘鍙渶瑕佸鐞嗘寜鐓ф帴鏀舵椂鐨勫噯紜『搴忓瓨鏀劇殑鍏冪礌欏廣?/P>
娉細浣犲彲浠ュ皢Queues縐頒負FIFO鏁版嵁緇撴瀯銆侳IFO鎰忎負鍏堣繘鍏堝嚭錛團irst In, First Out錛夛紝鍏舵剰絳夊悓浜庘滄帓闃熼『搴忥紙First come, first served錛夆濄?/P>
璇戞敞錛氬湪鏁版嵁緇撴瀯涓紝鎴戜滑閫氬父縐伴槦鍒椾負鍏堣繘鍏堝嚭鏁版嵁緇撴瀯錛岃屽爢鏍堝垯涓哄厛榪涘悗鍑烘暟鎹粨鏋勩傜劧鑰屾湰鏂囨病鏈変嬌鐢‵irst in ,first out鐨勬蹇碉紝鑰屾槸first come ,first served銆傚鏋滅炕璇戜負鍏堣繘鍏堟湇鍔★紝鎴栧厛澶勭悊閮戒笉鏄緢閫傚悎銆傝仈鎯沖埌鏈枃鍦ㄤ粙緇嶈姒傚康鏃訛紝浠ュ晢鍦鴻喘鐗╂椂闇瑕佹帓闃熶負渚嬶紝绱㈡у皢鍏惰瘧涓衡滄帓闃熼『搴忊濄傛垜鎯籌紝鏈夋帓闃熸剰璇嗙殑浜哄簲璇ヨ兘鏄庣櫧鍏朵腑鐨勫惈涔夊惂銆傞偅涔堜笌涔嬪搴旂殑錛屽浜庡爢鏍堬紝鍙湁鍚嶄負鈥滃弽鎺掗槦欏哄簭鈥濓紝鏉ヤ唬琛紙First Come, Last Served錛夈傚笇鏈涘悇浣嶆湅鍙嬭兘鏈夋洿濂藉湴緲昏瘧鏉ュ彇浠f垜榪欎釜鎷欏姡鐨勮瘝璇備負浠涔堜笉緲昏瘧涓衡滃厛榪涘厛鍑衡濓紝鈥滃厛榪涘悗鍑衡濆憿錛熸垜涓昏鑰冭檻鍒拌繖閲岀殑鑻辨枃served錛屽畠鎵鍖呭惈鐨勫惈涔夊緢騫匡紝鑷沖皯鎴戜滑鍙互灝嗗叾璁や負鏄鏁版嵁鐨勫鐞嗭紝鍥犺屽氨涓嶆槸綆鍗曞湴杈撳嚭閭d箞綆鍗曘傛墍浠ユ垜騫茶剢閬垮紑榪欎釜璇嶈鐨勫惈涔夈?BR>
鈥滃弽鎺掗槦欏哄簭鈥濃斺斿爢鏍堟暟鎹粨鏋?/P>
Queue鏁版嵁緇撴瀯閫氳繃浣跨敤鍐呴儴瀛樺偍object綾誨瀷鐨勭幆褰㈡暟緇勪互瀹炵幇鈥滄帓闃熼『搴忊濈殑鏈哄埗銆俀ueue鎻愪緵浜咵nqueue()鍜孌equeue()鏂規硶瀹炵幇鏁版嵁璁塊棶銆傗滄帓闃熼『搴忊濆湪澶勭悊鐜板疄闂鏃剁粡甯哥敤鍒幫紝灝ゅ叾鏄彁渚涙湇鍔$殑紼嬪簭錛屼緥濡倃eb鏈嶅姟鍣紝鎵撳嵃闃熷垪錛屼互鍙婂叾浠栧鐞嗗璇鋒眰鐨勭▼搴忋?/P>
鍦ㄧ▼搴忚璁′腑鍙﹀涓涓粡甯鎬嬌鐢ㄧ殑鏂瑰紡鏄滃弽鎺掗槦欏哄簭錛坒irst come,last served錛夆濄傚爢鏍堝氨鏄繖鏍蜂竴縐嶆暟鎹粨鏋勩傚湪.Net Framework鍩虹被搴撲腑鍖呭惈浜哠ystem.Collection.Stack綾伙紝鍜孮ueue涓鏍鳳紝Stack涔熸槸閫氳繃瀛樺偍object綾誨瀷鏁版嵁瀵硅薄鐨勫唴閮ㄧ幆褰㈡暟緇勬潵瀹炵幇銆係tack閫氳繃涓ょ鏂規硶璁塊棶鏁版嵁鈥斺擯ush(item)錛屽皢鏁版嵁鍘嬪叆鍫嗘爤錛汸op()鍒欐槸灝嗘暟鎹脊鍑哄爢鏍堬紝騫惰繑鍥炲叾鍊箋?/P>
涓涓猄tack鍙互閫氳繃涓涓瀭鐩寸殑鏁版嵁鍏冪礌闆嗗悎鏉ュ艦璞″湴琛ㄧず銆傚綋鍏冪礌鍘嬪叆鍫嗘爤鏃訛紝鏂板厓绱犺鏀懼埌鎵鏈夊叾浠栧厓绱犵殑欏剁錛屽脊鍑烘椂鍒欎粠鍫嗘爤欏剁縐婚櫎璇ラ」銆備笅闈袱騫呭浘婕旂ず浜嗗爢鏍堢殑鍘嬫爤鍜屽嚭鏍堣繃紼嬨傞鍏堟寜鐓ч『搴忓皢鏁版嵁1銆?銆?鍘嬪叆鍫嗘爤錛岀劧鍚庡脊鍑猴細
鍥句簲錛氬悜鍫嗘爤鍘嬪叆涓変釜鍏冪礌
鍥懼叚錛氬脊鍑烘墍鏈夊厓绱犲悗鐨凷tack
娉ㄦ剰Stack綾葷殑緙虹渷瀹歸噺鏄?0涓厓绱狅紝鑰岄潪Queue鐨?2涓厓绱犮傚拰Queue鍜孉rrayList涓鏍鳳紝Stack鐨勫閲忎篃鍙互鏍規嵁鏋勯犲嚱鏁板畾鍒躲傚鍚孉rrayList錛孲tack鐨勫閲忎篃鏄嚜鍔ㄦ垚鍊嶅闀褲傦紙鍥炲繂涓涓嬶細Queue鍙互鏍規嵁鏋勯犲嚱鏁扮殑鍙夐」璁劇疆澧為暱鍥犲瓙銆傦級
娉細Stack閫氬父琚О涓衡淟IFO鍏堣繘鍚庡嚭鈥濇垨鈥淟IFO鍚庤繘鍏堝嚭鈥濇暟鎹粨鏋勩?BR>鍫嗘爤錛氳綆楁満縐戝涓父瑙佺殑闅愬柣
鐜板疄鐢熸椿涓湁寰堝鍚孮ueue鐩鎬技鐨勪緥瀛愶細DMV錛堣瘧娉細涓嶇煡閬撳叾緙╁啓錛屾仌鎴戝闄嬪闂伙紝涓嶇煡鍏舵剰錛夈佹墦鍗頒換鍔″鐞嗙瓑銆傜劧鑰屽湪鐜板疄鐢熸椿寰堥毦鎵懼埌鍜孲tack榪戜技鐨勮寖渚嬶紝浣嗗畠鍦ㄥ悇縐嶅簲鐢ㄧ▼搴忎腑鍗存槸涓縐嶉潪甯擱噸瑕佺殑鏁版嵁緇撴瀯銆?/P>
璁炬兂涓涓嬫垜浠敤浠ョ紪紼嬬殑璁$畻鏈鴻璦錛屼緥濡傦細C#銆傚綋鎵цC#紼嬪簭鏃訛紝CLR錛堝叕鍏辮璦榪愯鏃訛級灝嗚皟鐢⊿tack浠ヨ窡韙姛鑳芥ā鍧楋紙璇戞敞錛氳繖閲屽師鏂囦負function錛屾垜鐞嗚В浣滆呯殑鍚箟涓嶄粎浠呬唬琛ㄥ嚱鏁幫紝浜嬪疄涓婂緢澶氱紪璇戝櫒閮戒細璋冪敤鍫嗘爤浠ョ‘瀹氬叾鍦板潃錛夌殑鎵ц鎯呭喌銆傛瘡褰撹皟鐢ㄤ竴涓姛鑳芥ā鍧楋紝鐩稿叧淇℃伅灝變細鍘嬪叆鍫嗘爤銆傝皟鐢ㄧ粨鏉熷垯寮瑰嚭鍫嗘爤銆傚爢鏍堥《绔暟鎹負褰撳墠璋冪敤鍔熻兘鐨勪俊鎭傦紙濡傝鏌ョ湅鍔熻兘璋冪敤鍫嗘爤鐨勬墽琛屾儏鍐碉紝鍙互鍦╒isual Studio.Net涓嬪垱寤轟竴涓」鐩紝璁劇疆鏂偣錛坆reakpoint錛夛紝鍦ㄦ墽琛岃皟璇曘傚綋鎵ц鍒版柇鐐規椂錛屼細鍦ㄨ皟璇曠獥鍙o紙Debug/Windows/Call Stack錛変笅鏄劇ず鍫嗘爤淇℃伅銆?/P>
搴忔暟绱㈠紩鐨勯檺鍒?/P>
鎴戜滑鍦ㄧ涓閮ㄥ垎涓鍒版暟緇勭殑鐗圭偣鏄悓縐嶇被鍨嬫暟鎹殑闆嗗悎錛屽茍閫氳繃搴忔暟榪涜绱㈠紩銆傚嵆錛氳闂i涓厓绱犵殑鏃墮棿涓哄畾鍊箋傦紙璇瘋浣忔縐嶅畾閲忔椂闂磋鏍囪涓篛(1)銆傦級
涔熻鎴戜滑騫舵病鏈夋剰璇嗗埌錛屽叾瀹炴垜浠鏈夊簭鏁版嵁鎬繪槸鈥滄儏鏈夌嫭閽熲濄備緥濡傚憳宸ユ暟鎹簱銆傛瘡涓憳宸ヤ互紺句繚鍙鳳紙social security number錛変負鍏跺敮涓鏍囪瘑銆傜ぞ淇濆彿鐨勬牸寮忎負DDD-DD-DDDD錛圖鐨勮寖鍥翠負鏁板瓧0鈥斺?錛夈傚鏋滄垜浠湁涓涓殢鏈烘帓鍒楀瓨鍌ㄦ墍鏈夊憳宸ヤ俊鎭殑鏁扮粍錛岃鏌ユ壘紺句繚鍙蜂負111-22-3333鐨勫憳宸ワ紝鍙兘浼氶亶鍘嗘暟緇勭殑鎵鏈夊厓绱犫斺斿嵆鎵цO(n錛夋鎿嶄綔銆傛洿濂界殑鍔炴硶鏄牴鎹ぞ淇濆彿榪涜鎺掑簭錛屽彲灝嗗叾鏌ユ壘鏃墮棿緙╁噺涓篛(log n)銆?/P>
鐞嗘兂鐘舵佷笅錛屾垜浠洿鎰挎剰鎵цO(1)嬈℃椂闂村氨鑳芥煡鎵懼埌鏌愬憳宸ョ殑淇℃伅銆備竴縐嶆柟妗堟槸寤虹珛涓涓法鍨嬬殑鏁扮粍錛屼互瀹為檯鐨勭ぞ淇濆彿鍊間負鍏跺叆鍙c傝繖鏍鋒暟緇勭殑璧鋒鐐逛負000-00-0000鍒?99-99-9999錛屽涓嬪浘鎵紺猴細
鍥句竷錛氬瓨鍌ㄦ墍鏈?浣嶆暟鏁板瓧鐨勫法鍨嬫暟緇?/P>
濡傚浘鎵紺猴紝姣忎釜鍛樺伐鐨勪俊鎭兘鍖呮嫭濮撳悕銆佺數璇濄佽柂姘寸瓑錛屽茍浠ュ叾紺句繚鍙蜂負绱㈠紩銆傚湪榪欑鏂瑰紡涓嬶紝璁塊棶浠繪剰涓涓憳宸ヤ俊鎭殑鏃墮棿鍧囦負瀹氬箋傝繖縐嶆柟妗堢殑緙虹偣灝辨槸絀洪棿鏋佸害鐨勬氮璐光斺斿叡鏈?09錛屽嵆10浜夸釜涓嶅悓鐨勭ぞ淇濆彿銆傚鏋滃叕鍙稿彧鏈?000鍚嶅憳宸ワ紝閭d箞榪欎釜鏁扮粍鍙埄鐢ㄤ簡0.0001%鐨勭┖闂淬傦紙鎹釜瑙掑害鏉ョ湅錛屽鏋滀綘瑕佽榪欎釜鏁扮粍鍏呭垎鍒╃敤錛屼篃璁鎬綘鐨勫叕鍙鎬笉寰椾笉闆囦劍鍏ㄤ笘鐣屼漢鍙g殑鍏垎涔嬩竴銆傦級
鐢ㄥ搱甯屽嚱鏁板帇緙╁簭鏁扮儲寮?/P>
鏄捐屾槗瑙侊紝鍒涘緩10浜夸釜鍏冪礌鏁扮粍鏉ュ瓨鍌?000鍚嶅憳宸ョ殑淇℃伅鏄棤娉曟帴鍙楃殑銆傜劧鑰屾垜浠張榪垏闇瑕佹彁楂樻暟鎹闂熷害浠ヨ揪鍒頒竴涓父閲忔椂闂淬備竴縐嶉夋嫨鏄嬌鐢ㄥ憳宸ョぞ淇濆彿鐨勬渶鍚庡洓浣嶆潵鍑忓皯紺句繚鍙風殑璺ㄥ害銆傝繖鏍蜂竴鏉ワ紝鏁扮粍鐨勮法搴﹀彧闇瑕佷粠0000鍒?999銆傚浘鍏樉紺轟簡鍘嬬緝鍚庣殑鏁扮粍銆?BR>
鍥懼叓錛氬帇緙╁悗鐨勬暟緇?/P>
姝ゆ柟妗堟棦淇濊瘉浜嗚闂楁椂涓哄父閲忓鹼紝鍙堝厖鍒嗗埄鐢ㄤ簡瀛樺偍絀洪棿銆傞夋嫨紺句繚鍙風殑鍚庡洓浣嶆槸闅忔満鐨勶紝鎴戜滑涔熷彲浠ヤ換鎰忕殑浣跨敤涓棿鍥涗綅錛屾垨鑰呴夋嫨絎?銆?銆?銆?浣嶃?/P>
鍦ㄦ暟瀛︿笂灝嗚繖縐?浣嶆暟杞崲涓?浣嶆暟鎴愪負鍝堝笇杞崲錛坔ashing錛夈傚搱甯岃漿鎹㈠彲浠ュ皢涓涓儲寮曞櫒絀洪棿錛坕ndexers space錛夎漿鎹負鍝堝笇琛紙hash table錛夈?/P>
鍝堝笇鍑芥暟瀹炵幇鍝堝笇杞崲銆備互紺句繚鍙風殑渚嬪瓙鏉ヨ錛屽搱甯屽嚱鏁癏()琛ㄧず涓猴細
H(x) = x 鐨勫悗鍥涗綅
鍝堝笇鍑芥暟鐨勮緭鍏ュ彲浠ユ槸浠繪剰鐨勪節浣嶇ぞ淇濆彿錛岃岀粨鏋滃垯鏄ぞ淇濆彿鐨勫悗鍥涗綅鏁板瓧銆傛暟瀛︽湳璇腑錛岃繖縐嶅皢涔濅綅鏁拌漿鎹負鍥涗綅鏁扮殑鏂規硶縐頒負鍝堝笇鍏冪礌鏄犲皠錛屽鍥句節鎵紺猴細
鍥句節錛氬搱甯屽嚱鏁板浘紺?/P>
鍥句節闃愭槑浜嗗湪鍝堝笇鍑芥暟涓細鍑虹幇鐨勪竴縐嶈涓衡斺斿啿紿侊紙collisions錛夈傚嵆鎴戜滑灝嗕竴涓浉瀵瑰ぇ鐨勯泦鍚堢殑鍏冪礌鏄犲皠鍒扮浉瀵瑰皬鐨勯泦涓椂鏃訛紝鍙兘浼氬嚭鐜扮浉鍚岀殑鍊箋備緥濡傜ぞ淇濆彿涓墍鏈夊悗鍥涗綅涓?000鐨勫潎琚槧灝勪負0000銆傞偅涔?00-99-0000錛?13-14-0000錛?33-66-0000錛岃繕鏈夊叾浠栫殑寰堝閮藉皢鏄?000銆?/P>
鐪嬬湅涔嬪墠鐨勪緥瀛愶紝濡傛灉鎴戜滑瑕佹坊鍔犱竴涓ぞ淇濆彿涓?23-00-0191鐨勬柊鍛樺伐錛屼細鍙戠敓浠涔堟儏鍐碉紵鏄劇劧璇曞浘娣誨姞璇ュ憳宸ヤ細鍙戠敓鍐茬獊錛屽洜涓哄湪0191浣嶇疆涓婂凡緇忓瓨鍦ㄤ竴涓憳宸ャ?/P>
鏁板鏍囨敞錛氬搱甯屽嚱鏁板湪鏁板鏈涓婃洿澶氬湴琚弿榪頒負f錛欰->B銆傚叾涓瓅A|>|B|錛屽嚱鏁癴涓嶆槸涓涓鏄犲皠鍏崇郴錛屾墍浠ヤ箣闂翠細鏈夊啿紿併?/P>
鏄劇劧鍐茬獊鐨勫彂鐢熶細浜х敓涓浜涢棶棰樸傚湪涓嬩竴鑺傦紝鎴戜滑浼氱湅鐪嬪搱甯屽嚱鏁頒笌鍐茬獊鍙戠敓涔嬮棿鐨勫叧緋伙紝鐒跺悗綆鍗曞湴鐘笅澶勭悊鍐茬獊鐨勫嚑縐嶆満鍒躲傛帴涓嬫潵錛屾垜浠細灝嗘敞鎰忓姏鏀懼湪System.Collection.Hashtable綾伙紝騫舵彁渚涗竴涓搱甯岃〃鐨勫疄鐜般傛垜浠細浜嗚В鏈夊叧Hashtable綾葷殑鍝堝笇鍑芥暟錛屽啿紿佽В鍐蟲満鍒訛紝浠ュ強涓浜涗嬌鐢℉ashtable鐨勪緥瀛愩?/P>
閬垮厤鍜岃В鍐沖啿紿?/P>
褰撴垜浠坊鍔犳暟鎹埌鍝堝笇琛ㄤ腑錛屽啿紿佹槸瀵艱嚧鏁翠釜鎿嶄綔琚牬鍧忕殑涓涓洜绱犮傚鏋滄病鏈夊啿紿侊紝鍒欐彃鍏ュ厓绱犳搷浣滄垚鍔燂紝濡傛灉鍙戠敓浜嗗啿紿侊紝灝遍渶瑕佸垽鏂彂鐢熺殑鍘熷洜銆傜敱浜庡啿紿佷駭鐢熸彁楂樹簡浠d環錛屾垜浠殑鐩爣灝辨槸瑕佸敖鍙兘灝嗗啿紿佸帇鑷蟲渶浣庛?/P>
鍝堝笇鍑芥暟涓啿紿佸彂鐢熺殑棰戠巼涓庝紶閫掑埌鍝堝笇鍑芥暟涓殑鏁版嵁鍒嗗竷鏈夊叧銆傚湪鎴戜滑鐨勪緥瀛愪腑錛屽亣瀹氱ぞ淇濆彿鏄殢鏈哄垎閰嶇殑錛岄偅涔堜嬌鐢ㄦ渶鍚庡洓浣嶆暟瀛楁槸涓涓笉閿欑殑閫夋嫨銆備絾濡傛灉紺句繚鍙鋒槸浠ュ憳宸ョ殑鍑虹敓騫翠喚鎴栧嚭鐢熷湴鍧鏉ュ垎閰嶏紝鍥犱負鍛樺伐鐨勫嚭鐢熷勾浠藉拰鍦板潃鏄劇劧閮戒笉鏄潎鍖鍒嗛厤鐨勶紝閭d箞閫夌敤鍚庡洓浣嶆暟灝變細鍥犱負澶ч噺鐨勯噸澶嶈屽鑷存洿澶х殑鍐茬獊銆?/P>
娉細瀵逛簬鍝堝笇鍑芥暟鍊肩殑鍒嗘瀽闇瑕佸叿澶囦竴瀹氱殑緇熻瀛︾煡璇嗭紝榪欒秴鍑轟簡鏈枃璁ㄨ鐨勮寖鍥淬傚繀瑕佸湴錛屾垜浠彲浠ヤ嬌鐢↘緇達紙k slots錛夌殑鍝堝笇琛ㄦ潵淇濊瘉閬垮厤鍐茬獊錛屽畠鍙互灝嗕竴涓殢鏈哄間粠鍝堝笇鍑芥暟鐨勫煙涓槧灝勫埌浠繪剰涓涓壒瀹氬厓绱狅紝騫墮檺瀹氬湪1/k鐨勮寖鍥村唴銆傦紙濡傛灉榪欒浣犳洿鍔犵殑緋婃秱錛屽崈涓囧埆鎷呭績錛侊級
鎴戜滑灝嗛夋嫨鍚堥傜殑鍝堝笇鍑芥暟鐨勬柟娉曟垚涓哄啿紿侀伩鍏嶆満鍒訛紙collision avoidance錛夛紝宸叉湁璁稿鐮旂┒璁捐榪欎竴棰嗗煙錛屽洜涓哄搱甯屽嚱鏁扮殑閫夋嫨鐩存帴褰卞搷浜嗗搱甯岃〃鐨勬暣浣撴ц兘銆傚湪涓嬩竴鑺傦紝鎴戜滑浼氫粙緇嶅湪.Net Framework鐨凥ashtable綾諱腑瀵瑰搱甯屽嚱鏁扮殑浣跨敤銆?/P>
鏈夊緢澶氭柟娉曞鐞嗗啿紿侀棶棰樸傛渶鐩存帴鐨勬柟娉曪紝鎴戜滑縐頒負鈥滃啿紿佽В鍐蟲満鍒垛濓紙collision resolution錛夛紝鏄皢瑕佹彃鍏ュ埌鍝堝笇琛ㄤ腑鐨勫璞℃斁鍒板彟澶栦竴鍧楃┖闂翠腑錛屽洜涓哄疄闄呯殑絀洪棿宸茬粡琚崰鐢ㄤ簡銆傚叾涓竴縐嶆渶綆鍗曠殑鏂規硶縐頒負鈥滅嚎鎬ф寲鎺樷濓紙linear probing錛夛紝瀹炵幇姝ラ濡備笅錛?BR>1錛?nbsp;褰撹鎻掑叆涓涓柊鐨勫厓绱犳椂錛岀敤鍝堝笇鍑芥暟鍦ㄥ搱甯岃〃涓畾浣嶏紱
2錛?nbsp;媯鏌ヨ〃涓浣嶇疆鏄惁宸茬粡瀛樺湪鍏冪礌錛屽鏋滆浣嶇疆鍐呭涓虹┖錛屽垯鎻掑叆騫惰繑鍥烇紝鍚﹀垯杞悜姝ラ3銆?BR>3錛?nbsp;濡傛灉璇ュ湴鍧涓篿錛屽垯媯鏌+1鏄惁涓虹┖錛屽鏋滃凡琚崰鐢紝鍒欐鏌+2錛屼緷姝ょ被鎺紝鐭ラ亾鎵懼埌涓涓唴瀹逛負絀虹殑浣嶇疆銆?/P>
渚嬪錛氬鏋滄垜浠灝嗕簲涓憳宸ョ殑淇℃伅鎻掑叆鍒板搱甯岃〃涓細Alice(333-33-1234)錛孊ob(444-44-1234), Cal (555-55-1237), Danny (000-00-1235), and Edward (111-00-1235)銆傚綋娣誨姞瀹屼俊鎭悗錛屽鍥懼崄鎵紺猴細
鍥懼崄錛氭湁鐩鎬技紺句繚鍙風殑浜斾綅鍛樺伐
Alice鐨勭ぞ淇濆彿琚滃搱甯岋紙榪欓噷鍋氬姩璇嶇敤錛岃瘧娉級鈥濅負1234錛屽洜姝ゅ瓨鏀句綅緗負1234銆傛帴涓嬫潵鏉ワ紝Bob鐨勭ぞ淇濆彿涔熻鈥滃搱甯屸濅負1234錛屼絾鐢變簬浣嶇疆1234澶勫凡緇忓瓨鍦ˋlice鐨勪俊鎭紝鎵浠ob鐨勪俊鎭氨琚斁鍒頒笅涓涓綅緗斺?235銆備箣鍚庯紝娣誨姞Cal錛屽搱甯屽間負1237錛?237浣嶇疆涓虹┖錛屾墍浠al灝辨斁鍒?237澶勩備笅涓涓槸Danny錛屽搱甯屽間負1235銆?235宸茶鍗犵敤錛屽垯媯鏌?236浣嶇疆鏄惁涓虹┖銆傛棦鐒朵負絀猴紝Danny灝辮鏀懼埌閭e効銆傛渶鍚庯紝娣誨姞Edward鐨勪俊鎭傚悓鏍蜂粬鐨勫搱甯屽ソ涓?235銆?235宸茶鍗犵敤錛屾鏌?236錛屼篃琚崰鐢ㄤ簡錛屽啀媯鏌?237錛岀洿鍒版鏌ュ埌1238鏃訛紝璇ヤ綅緗負絀猴紝浜庢槸Edward琚斁鍒頒簡1238浣嶇疆銆?/P>
鎼滅儲鍝堝笇琛ㄦ椂錛屽啿紿佷粛鐒跺瓨鍦ㄣ備緥濡傦紝濡備笂鎵紺虹殑鍝堝笇琛紝鎴戜滑瑕佽闂瓻dward鐨勪俊鎭傚洜姝ゆ垜浠皢Edward鐨勭ぞ淇濆彿111-00-1235鍝堝笇涓?235錛屽茍寮濮嬫悳绱€傜劧鑰屾垜浠湪1235浣嶇疆鎵懼埌鐨勬槸Bob錛岃岄潪Edward銆傛墍浠ユ垜浠啀鎼滅儲1236錛屾壘鍒扮殑鍗存槸Danny銆傛垜浠殑綰挎ф悳绱㈢戶緇煡鎵劇煡閬撴壘鍒癊dward鎴栨壘鍒板唴瀹逛負絀虹殑浣嶇疆銆傜粨鏋滄垜浠彲鑳戒細寰楀嚭緇撴灉鏄ぞ淇濆彿涓?11-00-1235鐨勫憳宸ュ茍涓嶅瓨鍦ㄣ?/P>
綰挎ф寲鎺樿櫧鐒剁畝鍗曪紝浣嗗茍鏄В鍐沖啿紿佺殑濂界殑絳栫暐錛屽洜涓哄畠浼氬鑷村悓綾昏仛鍚堬紙clustering錛夈傚鏋滄垜浠娣誨姞10涓憳宸ワ紝浠栦滑鐨勭ぞ淇濆彿鍚庡洓浣嶅潎涓?344銆傞偅涔堟湁10涓繛緇┖闂達紝浠?344鍒?353鍧囪鍗犵敤銆傛煡鎵捐繖10涓憳宸ヤ腑鐨勪換涓鍛樺伐閮借鎼滅儲榪欎竴綈囦綅緗┖闂淬傝屼笖錛屾坊鍔犱換浣曚竴涓搱甯屽煎湪3344鍒?353鑼冨洿鍐呯殑鍛樺伐閮藉皢澧炲姞榪欎竴綈囩┖闂寸殑闀垮害銆傝蹇熸煡璇紝鎴戜滑搴旇璁╂暟鎹潎鍖鍒嗗竷錛岃屼笉鏄泦涓煇鍑犱釜鍦版柟褰㈡垚涓綈囥?/P>
鏇村ソ鐨勬寲鎺樻妧鏈槸鈥滀簩嬈℃寲鎺樷濓紙quadratic probing錛夛紝姣忔媯鏌ヤ綅緗┖闂寸殑姝ラ暱浠ュ鉤鏂瑰嶅鍔犮備篃灝辨槸璇達紝濡傛灉浣嶇疆s琚崰鐢紝鍒欓鍏堟鏌?/SPAN>s+12澶勶紝鐒跺悗媯鏌?/SPAN>s-12錛?/SPAN>s+22錛?/SPAN>s-22錛?/SPAN>s+32 渚濇綾繪帹錛岃屼笉鏄薄綰挎ф寲鎺橀偅鏍蜂粠s+1錛宻+2鈥︹︾嚎鎬у闀褲傚綋鐒朵簩嬈℃寲鎺樺悓鏍蜂細瀵艱嚧鍚岀被鑱氬悎銆?/P>
涓嬩竴鑺傛垜浠皢浠嬬粛絎笁縐嶅啿紿佽В鍐蟲満鍒垛斺斾簩搴﹀搱甯岋紝瀹冭搴旂敤鍦?Net Framework鐨勫搱甯岃〃綾諱腑銆?/P>
System.Collections.Hashtable 綾?BR>.Net Framework 鍩虹被搴撳寘鎷簡Hashtable綾葷殑瀹炵幇銆傚綋鎴戜滑瑕佹坊鍔犲厓绱犲埌鍝堝笇琛ㄤ腑鏃訛紝鎴戜滑涓嶄粎瑕佹彁渚涘厓绱狅紙item錛夛紝榪樿涓鴻鍏冪礌鎻愪緵鍏抽敭瀛楋紙key錛夈侹ey鍜宨tem鍙互鏄換鎰忕被鍨嬨傚湪鍛樺伐渚嬪瓙涓紝key涓哄憳宸ョ殑紺句繚鍙鳳紝item鍒欓氳繃Add()鏂規硶琚坊鍔犲埌鍝堝笇琛ㄤ腑銆?/P>
瑕佽幏寰楀搱甯岃〃涓殑鍏冪礌錛坕tem錛夛紝浣犲彲浠ラ氳繃key浣滀負绱㈠紩璁塊棶錛屽氨璞″湪鏁扮粍涓敤搴忔暟浣滀負绱㈠紩閭f牱銆備笅闈㈢殑C#灝忕▼搴忔紨紺轟簡榪欎竴姒傚康銆傚畠浠ュ瓧絎︿覆鍊間綔涓簁ey娣誨姞浜嗕竴浜涘厓绱犲埌鍝堝笇琛ㄤ腑銆傚茍閫氳繃key璁塊棶鐗瑰畾鐨勫厓绱犮?/P>
using System; public class HashtableDemo public static void Main() // Step through all items in the Hashtable 瑕佽璇嗗埌鎻掑叆鍏冪礌鐨勯『搴忓拰鍏抽敭瀛楅泦鍚堜腑key鐨勯『搴忓茍涓嶄竴瀹氱浉鍚屻傚叧閿瓧闆嗗悎鏄互瀛樺偍鐨勫叧閿瓧瀵瑰簲鐨勫厓绱犱負鍩虹錛屼笂闈㈢殑紼嬪簭鐨勮繍琛岀粨鏋滄槸錛?/P>
Value at ages["Jisun"] = 25 鍗充嬌鎻掑叆鍒板搱甯岃〃涓殑欏哄簭鏄細Scott錛孲am錛?Jisun銆?/P>
Hashtable綾葷殑鍝堝笇鍑芥暟 Hashtable綾諱腑鐨勫搱甯屽嚱鏁版瘮鎴戜滑鍓嶉潰浠嬬粛鐨勭ぞ淇濆彿鐨勫搱甯屽兼洿鍔犲鏉傘傞鍏堬紝瑕佽浣忕殑鏄搱甯屽嚱鏁拌繑鍥炵殑鍊兼槸搴忔暟銆傚浜庣ぞ淇濆彿鐨勪緥瀛愭潵璇村緢瀹規槗鍔炲埌錛屽洜涓虹ぞ淇濆彿鏈韓灝辨槸鏁板瓧銆傛垜浠彧闇瑕佹埅鍙栧叾鏈鍚庡洓浣嶆暟錛屽氨鍙互寰楀埌鍚堥傜殑鍝堝笇鍊箋傜劧鑰孒ashtable綾諱腑鍙互鎺ュ彈浠諱綍綾誨瀷鐨勫間綔涓簁ey銆傚氨璞′笂闈㈢殑渚嬪瓙錛宬ey鏄瓧絎︿覆綾誨瀷錛屽鈥淪cott鈥濇垨鈥淪am鈥濄傚湪榪欐牱涓涓緥瀛愪腑錛屾垜浠嚜鐒舵兂鏄庣櫧鍝堝笇鍑芥暟鏄庢牱灝唖tring杞崲涓烘暟瀛楃殑銆?/P>
榪欑濂囧鐨勮漿鎹㈠簲璇ュ綊鍔熶簬GetHashCode()鏂規硶錛屽畠瀹氫箟鍦⊿ystem.Object綾諱腑銆侽bject綾諱腑GetHashCode()榛樿鐨勫疄鐜版槸榪斿洖涓涓敮涓鐨勬暣鏁板間互淇濊瘉鍦╫bject鐨勭敓鍛芥湡涓笉琚慨鏀廣傛棦鐒舵瘡縐嶇被鍨嬮兘鏄洿鎺ユ垨闂存帴浠嶰bject媧劇敓鐨勶紝鍥犳鎵浠bject閮藉彲浠ヨ闂鏂規硶銆傝嚜鐒訛紝瀛楃涓叉垨鍏朵粬綾誨瀷閮借兘浠ュ敮涓鐨勬暟瀛楀兼潵琛ㄧず銆?/P>
Hashtable綾諱腑鐨勫浜庡搱甯屽嚱鏁扮殑瀹氫箟濡備笅錛?/P>
H(key) = [GetHash(key) + 1 + (((GetHash(key) >> 5) + 1) % (hashsize 鈥?1))] % hashsize 榪欓噷鐨凣etHash(key)錛岄粯璁や負瀵筴ey璋冪敤GetHashCode()鏂規硶鐨勮繑鍥炲鹼紙铏界劧鍦ㄤ嬌鐢℉ashtable鏃訛紝浣犲彲浠ヨ嚜瀹氫箟GetHash()鍑芥暟錛夈侴etHash(key)>>5琛ㄧず灝嗗緱鍒発ey鐨勫搱甯屽鹼紝鍚戝彸縐誨姩5浣嶏紝鐩稿綋浜庡皢鍝堝笇鍊奸櫎浠?2銆?鎿嶄綔絎﹀氨鏄箣鍓嶄粙緇嶇殑姹傛ā榪愮畻絎︺侶ashsize鎸囩殑鏄搱甯岃〃鐨勯暱搴︺傚洜涓鴻榪涜姹傛ā錛屽洜姝ゆ渶鍚庣殑緇撴灉H錛坘錛夊湪0鍒癶ashsize-1涔嬮棿銆傛棦鐒秇ashsize涓哄搱甯岃〃鐨勯暱搴︼紝鍥犳緇撴灉鎬繪槸鍦ㄥ彲浠ユ帴鍙楃殑鑼冨洿鍐呫?/P>
Hashtable綾諱腑鐨勫啿紿佽В鍐蟲柟妗?/P>
褰撴垜浠湪鍝堝笇琛ㄤ腑娣誨姞鎴栬幏鍙栦竴涓厓绱犳椂錛屼細鍙戠敓鍐茬獊銆傛彃鍏ュ厓绱犳椂錛屽繀欏繪煡鎵懼唴瀹逛負絀虹殑浣嶇疆錛岃岃幏鍙栧厓绱犳椂錛屽嵆浣夸笉鍦ㄩ鏈熺殑浣嶇疆澶勶紝涔熷繀欏繪壘鍒拌鍏冪礌銆傚墠闈㈡垜浠畝鍗曞湴浠嬬粛浜嗕袱縐嶈В鍐沖啿紿佺殑鏈哄埗鈥斺旂嚎鎬у拰浜屾鎸栨帢銆傚湪Hashtable綾諱腑浣跨敤鐨勬槸涓縐嶅畬鍏ㄤ笉鍚岀殑鎶鏈紝鎴愪負浜屽害鍝堝笇錛坮ehasing錛?鏈夌殑璧勬枡涔熷皢鍏剁О涓哄弻綺懼害鍝堝笇double hashing)銆?/P>
浜屽害鍝堝笇鐨勫伐浣滃師鐞嗗涓嬶細鏈変竴涓寘鍚涓搱甯屽嚱鏁幫紙H1鈥︹n錛夌殑闆嗗悎銆傚綋鎴戜滑瑕佷粠鍝堝笇琛ㄤ腑娣誨姞鎴栬幏鍙栧厓绱犳椂錛岄鍏堜嬌鐢ㄥ搱甯屽嚱鏁癏1銆傚鏋滃鑷村啿紿侊紝鍒欏皾璇曚嬌鐢℉2錛屼竴鐩村埌Hn銆傚悇涓搱甯屽嚱鏁版瀬鍏剁浉浼鹼紝涓嶅悓鐨勬槸瀹冧滑閫夌敤鐨勪箻娉曞洜瀛愩傞氬父錛屽搱甯屽嚱鏁癏k鐨勫畾涔夊涓嬶細 娉細榪愮敤浜屽害鍝堝笇閲嶈鐨勬槸鍦ㄦ墽琛屼簡hashsize嬈℃寲鎺樺悗錛屽搱甯岃〃涓殑姣忎竴涓綅緗兘紜垏鍦拌鏈変笖浠呮湁涓嬈¤闂備篃灝辨槸璇達紝瀵逛簬緇欏畾鐨刱ey錛屽鍝堝笇琛ㄤ腑鐨勫悓涓浣嶇疆涓嶄細鍚屾椂浣跨敤Hi鍜孒j銆傚湪Hashtable綾諱腑浣跨敤浜屽害鍝堝笇鍏紡錛屽叾淇濊瘉涓猴細(1 + (((GetHash(key) >> 5) + 1) % (hashsize 鈥?1))涓巋ashsize涓よ呬簰涓虹礌鏁般傦紙涓ゆ暟浜掍負绱犳暟琛ㄧず涓よ呮病鏈夊叡鍚岀殑璐ㄥ洜瀛愩傦級濡傛灉hashsize鏄竴涓礌鏁幫紝鍒欎繚璇佽繖涓や釜鏁頒簰涓虹礌鏁般?/P>
浜屽害鍝堝笇杈冨墠涓ょ鏈哄埗杈冨ソ鍦伴伩鍏嶄簡鍐茬獊銆?/P>
璋冪敤鍥犲瓙錛坙oad factors錛夊拰鎵╁厖鍝堝笇琛?/P>
Hashtable綾諱腑鍖呭惈涓涓鏈夋垚鍛樺彉閲弆oadFactor錛屽畠鎸囧畾浜嗗搱甯岃〃涓厓绱犱釜鏁頒笌琛ㄤ綅緗繪暟涔嬮棿鐨勬渶澶ф瘮渚嬨備緥濡傦細loadFactor絳変簬0.5錛屽垯璇存槑鍝堝笇琛ㄤ腑鍙湁涓鍗婄殑絀洪棿瀛樻斁浜嗗厓绱犲鹼紝鍏朵綑涓鍗婄殕涓虹┖銆?/P>
鍝堝笇琛ㄧ殑鏋勯犲嚱鏁頒互閲嶈澆鐨勬柟寮忥紝鍏佽鐢ㄦ埛鎸囧畾loadFactor鍊鹼紝瀹氫箟鑼冨洿涓?.1鍒?.0銆傝娉ㄦ剰鐨勬槸錛屼笉綆′綘鎻愪緵鐨勫兼槸澶氬皯錛岃寖鍥撮兘涓嶈秴榪?2%銆傚嵆浣夸綘浼犻掔殑鍊間負1.0錛孒ashtable綾葷殑loadFactor鍊艱繕鏄?.72銆傚井杞涓簂oadFactor鐨勬渶浣沖間負0.72錛屽洜姝よ櫧鐒墮粯璁ょ殑loadFactor涓?.0錛屼絾緋葷粺鍐呴儴鍗磋嚜鍔ㄥ湴灝嗗叾鏀瑰彉涓?.72銆傛墍浠ワ紝寤鴻浣犱嬌鐢ㄧ己鐪佸?.0錛堜簨瀹炰笂鏄?.72錛屾湁浜涜糠鎯戯紝涓嶆槸鍚楋紵錛?/P>
娉細鎴戣姳浜嗗ソ鍑犲ぉ鏃墮棿鍘誨挩璇㈠井杞殑寮鍙戜漢鍛樹負浠涔堣浣跨敤鑷姩杞崲錛熸垜寮勪笉鏄庣櫧錛屼負浠涔堜粬浠笉鐩存帴瑙勫畾鍊間負0.072鍒?.72涔嬮棿銆傛渶鍚庢垜浠庣紪鍐橦ashtable綾葷殑寮鍙戝洟闃熺殑鍒頒簡絳旀錛屼粬浠潪甯稿皢闂鐨勭紭鐢卞叕璇鎬簬浼椼備簨瀹炰笂錛岃繖涓洟闃熺粡榪囨祴璇曞彂鐜板鏋渓oadFactor瓚呰繃浜?.72錛屽皢浼氫弗閲嶇殑褰卞搷鍝堝笇琛ㄧ殑鎬ц兘銆備粬浠笇鏈涘紑鍙戜漢鍛樿兘澶熸洿濂藉湴浣跨敤鍝堝笇琛紝浣嗗嵈鍙兘璁頒笉浣?.72榪欎釜鏃犺寰嬫暟錛岀浉鍙嶅鏋滆瀹?.0涓烘渶浣沖鹼紝寮鍙戣呬細鏇村鏄撹浣忋備簬鏄紝灝卞艦鎴愮幇鍦ㄧ殑緇撴灉錛岃櫧鐒跺湪鍔熻兘涓婃湁灝戣鐗虹壊錛屼絾鍗翠嬌鎴戜滑鑳芥洿鍔犳柟渚垮湴浣跨敤鏁版嵁緇撴瀯錛岃屼笉鐢ㄦ劅鍒板ご鐤箋?/P>
鍚慔ashtable綾繪坊鍔犳柊鍏冪礌鏃訛紝閮借榪涜媯鏌ヤ互淇濊瘉鍏冪礌涓庣┖闂村ぇ灝忕殑姣斾緥涓嶄細瓚呰繃鏈澶ф瘮渚嬨傚鏋滆秴榪囦簡錛屽搱甯岃〃絀洪棿灝嗚鎵╁厖銆傛楠ゅ涓嬶細 騫歌繍鐨勬槸錛孒ashtable綾諱腑鐨凙dd()鏂規硶闅愯棌浜嗚繖浜涘鏉傜殑姝ラ錛屼綘涓嶉渶瑕佸叧蹇冨畠鐨勫疄鐜扮粏鑺傘?/P>
璋冪敤鍥犲瓙錛坙oad factor錛夊鍐茬獊鐨勫獎鍝嶅喅瀹氫簬鍝堝笇琛ㄧ殑鎬諱綋闀垮害鍜岃繘琛屾寲鎺樻搷浣滅殑嬈℃暟銆侺oad factor瓚婂ぇ錛屽搱甯岃〃瓚婂瘑闆嗭紝絀洪棿灝辮秺灝戯紝姣旇緝浜庣浉瀵圭█鐤忕殑鍝堝笇琛紝榪涜鎸栨帢鎿嶄綔鐨勬鏁板氨瓚婂銆傚鏋滀笉浣滅簿紜湴鍒嗘瀽錛屽綋鍐茬獊鍙戠敓鏃舵寲鎺樻搷浣滅殑棰勬湡嬈℃暟澶х害涓?/(1-lf)錛岃繖閲宭f鎸囩殑鏄痩oad factor銆?/P>
濡傚墠鎵榪幫紝寰蔣灝嗗搱甯岃〃鐨勭己鐪佽皟鐢ㄥ洜瀛愯瀹氫負0.72銆傚洜姝ゅ浜庢瘡嬈″啿紿侊紝騫沖潎鎸栨帢嬈℃暟涓?.5嬈°傛棦鐒惰鏁板瓧涓庡搱甯岃〃涓疄闄呭厓绱犱釜鏁版棤鍏籌紝鍥犳鍝堝笇琛ㄧ殑娓愯繘璁塊棶鏃墮棿涓篛錛?錛夛紝鏄劇劧榪滆繙濂戒簬鏁扮粍鐨凮(n)銆?/P>
鏈鍚庯紝鎴戜滑瑕佽璇嗗埌瀵瑰搱甯岃〃鐨勬墿鍏呭皢浠ユц兘鎹熻椾負浠d環銆傚洜姝わ紝浣犲簲璇ラ鍏堜及璁′綘鐨勫搱甯岃〃涓渶鍚庡彲鑳戒細瀹圭撼鐨勫厓绱犳繪暟錛屽湪鍒濆鍖栧搱甯岃〃鏃朵互鍚堥傜殑鍊艱繘琛屾瀯閫狅紝浠ラ伩鍏嶄笉蹇呰鐨勬墿鍏呫?BR> 絎竴閮ㄥ垎:鏁版嵁緇撴瀯綆浠?BR> 鍘熸枃閾炬帴錛?A >Part 1: An Introduction to Data Structures 浠嬬粛: 鍦ㄩ槄璇繪湰鏂囧唴瀹逛箣鍓?璁╂垜浠厛鐪嬬湅榪欏叚閮ㄥ垎鐨勪富瑕佸唴瀹?濡傛灉浣犳湁浠涔堟兂娉?鎴栬寰楁湰鏂囨湁浠涔堥仐婕忎箣澶?甯屾湜浣犻氳繃e-mail(mitchell@4guysfromrolla.com)鍜屾垜鑱旂郴,鍏卞悓鍒嗕韓浣犵殑鎬濇兂.鍋囧鏈夋椂闂寸殑璇?鎴戝緢楂樺叴灝嗕綘鐨勫緩璁斁鍒板悎閫傜殑閮ㄥ垎,濡傛湁蹇呰,鍙互鍦ㄨ繖綃囩郴鍒楁枃绔犱腑鍔犱笂絎竷閮ㄥ垎. 絎竴閮ㄥ垎:棣栧厛浠嬬粛鏁版嵁緇撴瀯鍦ㄧ畻娉曡璁′腑鐨勯噸瑕佹?鍐沖畾鏁版嵁緇撴瀯鐨勪紭鍔e湪浜庡叾鎬ц兘.鎴戜滑灝嗙粡榪囦弗鏍煎垎鏋愭暟鎹粨鏋勭殑鍚勭鎬ц兘.姝ら儴鍒嗚繕灝嗕粙緇?Net Frameword涓嬩袱縐嶅父鐢ㄧ殑鏁版嵁鏈烘瀯:Array 鍜孉rrayList.鎴戜滑灝嗚冨療鍏剁粨鏋勭殑鎿嶄綔鏂瑰紡鍙婂叾鏁堢巼. 絎簩閮ㄥ垎:鎴戜滑灝嗙戶緇粠鏇村緇嗚妭涓婂垎鏋怉rrayList緇撴瀯,鍚屾椂榪樺皢浠嬬粛Queue綾誨拰Stack綾?鍜孉rrayList涓鏍?Queue鍜孲tack瀛樻斁鐨勯兘鏄竴緇勮繛緇殑鏁版嵁闆嗗悎,閮藉睘浜?Net Framework鍩虹被搴?涓嶢rrayList涓嶅悓鐨勬槸,Stack鍜孮ueue鍙兘浠ラ鍏堣瀹氱殑搴忓垪欏哄簭璇誨彇鍏舵暟鎹?鍏堣繘鍏堝嚭鍜屽厛榪涘悗鍑?,鑰孉rrayList鍙互浠繪剰鑾峰彇鏁版嵁欏?鎴戜滑灝嗛氳繃紺轟緥紼嬪簭鏉ヨ冨療Queue,Stack,騫墮氳繃鎵╁睍ArrayList綾繪潵瀹炵幇瀹冧滑.涔嬪悗,鎴戜滑榪樿鍒嗘瀽鍝堝笇琛℉ashTable,瀹冭薄ArrayList涓鏍峰彲浠ョ洿鎺ヨ闂暟鎹?涓嶅悓鐨勬槸瀹冧互key(瀛楃涓?涓虹儲寮? ArrayList瀵規暟鎹洿鎺ヨ鍙栧拰瀛樺偍鏄竴縐嶇悊鎯崇殑鏁版嵁緇撴瀯,鍚屾椂,瀹冧篃鏄敮鎸佹暟鎹悳绱㈢殑鍊欓夋柟妗?鍦ㄧ涓夐儴鍒?鎴戜滑灝嗚冨療浜屽弶鏍戠粨鏋?瀵逛簬鏁版嵁鎼滅儲鑰岃█,瀹冩瘮ArrayList鏇村姞鏈夋晥. .Net Framework騫朵笉鍖呭惈姝ょ鍐呯疆鏁版嵁緇撴瀯,鍥犳闇瑕佹垜浠嚜宸卞垱寤? 浜屽弶鏍戞悳绱㈢殑鏁堢巼鍙楀埗浜庢彃鍏ュ埌鏍戜腑鐨勬暟鎹殑欏哄簭.濡傛灉鎴戜滑鎻掑叆鐨勬槸鏈夊簭鎴栬繎浼兼湁搴忕殑鏁版嵁,瀹為檯涓?瀹冪殑鏁堢巼涓嶅ArrayList.涓轟簡灝嗚繖涓ょ鐨勪紭鍔跨粨鍚堣搗鏉?鍦ㄧ鍥涢儴鍒?鎴戦棬灝嗚冨療涓縐嶆湁瓚g殑闅忔満鏁版嵁緇撴瀯鈥斺擲kipList. SkipList鏃繚鐣欎簡浜屽弶鏍戞悳绱㈢殑楂樻晥鐜?鍚屾椂杈撳叆鏁版嵁鐨勯『搴忓鍏舵晥鐜囧獎鍝嶇敋寰? 絎簲閮ㄥ垎鎴戜滑灝嗘敞鎰忓姏杞悜閫氬父鐢ㄦ潵琛ㄧ幇鍥懼艦鐨勬暟鎹粨鏋?鍥?graph)鏄紬澶氳妭鐐逛互鍙婅妭鐐逛箣闂磋竟鐨勯泦鍚?涓句緥鏉ヨ,鍦板浘灝卞彲浠ュ浘鐨勫艦寮忔潵琛ㄧ幇.鍩庡競鏄妭鐐?鍏礬鍒欐槸榪炴帴鑺傜偣涔嬮棿鐨勮竟.璁稿鐜板疄闂閮藉彲浠ユ娊璞℃垚鍥劇殑褰㈠紡,鍥犳,鍥句篃鏄垜浠粡甯歌鐢ㄥ埌鐨勬暟鎹粨鏋? 鏈鍚?絎叚閮ㄥ垎鎴戜滑灝嗚皥鍒皉eprisent sets(琛ㄧず闆?)鍜宒isjoint sets(闈炲叧鑱旈泦,鍗充氦闆嗕負絀?)闆嗗悎鏄竴縐嶆棤搴忔暟鎹殑闆嗕腑.闈炲叧鑱旈泦鏄寚瀹冨拰鍙﹀涓涓泦鍚堟病鏈夊叡鍚岀殑鍏冪礌.鎴戜滑鍦ㄧ▼搴忕紪鍐欐椂浼氱粡甯哥敤鍒伴泦鍚堝拰闈炲叧鑱旈泦.鎴戜滑灝嗗湪榪欎竴閮ㄥ垎涓緇嗘弿榪板畠. 褰撴垜浠湪鎬濊冧竴涓壒鍒殑搴旂敤紼嬪簭鎴栬呯▼搴忕殑闂鏃?澶氭暟寮鍙戜漢鍛?鍖呮嫭鎴戣嚜宸?閮藉皢鍏磋叮闆嗕腑鍒扮畻娉曚笂浠ヨВ鍐蟲墜澶寸殑闅鵑,鎴栬呬負搴旂敤紼嬪簭鍔犱笂涓涓緢閰風殑鐗硅壊浠ヤ赴瀵岀敤鎴風殑緇忛獙.鎴戜滑浼間箮寰堝皯鍚埌鏈変漢浼氫負浠栨墍浣跨敤鐨勬暟鎹粨鏋勮屾縺鍔ㄤ笉宸?鍟у暓璧炲徆. 鐒惰?鐢ㄥ湪涓涓壒瀹氱畻娉曚腑鐨勬暟鎹粨鏋勮兘澶熷緢澶х▼搴︿笂褰卞搷鍏舵ц兘.鏈甯歌鐨勪緥瀛愬氨鏄湪鏁版嵁緇撴瀯涓煡鎵句竴涓厓绱?鍦ㄦ暟緇勪腑,鏌ユ壘榪囩▼鎵鑰楁椂闂存槸涓庤繖涓暟緇勪腑鍏冪礌鐨勪釜鏁版槸鎴愭姣旂殑.閲囩敤浜屽弶鏁版垨鑰匰kipLists(鎴戞壘涓嶅埌鍚堥傜殑緲昏瘧,鎸夊墠鎵榪?瀹冨寘鍚簡闅忔満鏁扮殑闆嗗悎,涔熻鐪嬩簡鍚庨潰鐨勯儴鍒嗕細鎯沖埌鍚堥傜殑涓枃),鑰楁椂涓庢暟鎹釜鏁版瘮渚嬫垚綰垮瀷涓嬮檷(sub-linear,鎴戝張榛旈┐璇嶇┓浜?.褰撴垜浠鎼滅儲澶ч噺鐨勬暟鎹椂,鏁版嵁緇撴瀯鐨勯夋嫨瀵圭▼搴忕殑鎬ц兘灝ゅ叾閲嶈,鍏跺樊鍒敋鑷寵揪鍒版暟縐?涔冭嚦浜庢暟鍒嗛挓. 鏃㈢劧鍦ㄧ畻娉曚腑浣跨敤鐨勬暟鎹粨鏋勫獎鍝嶄簡綆楁硶鐨勬晥鐜?鍥犳姣旇緝鍚勭鏁版嵁緇撴瀯鐨勬晥鐜囧茍浠庝腑閫夋嫨涓縐嶆洿浣崇殑鏂規硶灝辨樉寰楀挨涓洪噸瑕?浣滀負寮鍙戣呰岃█,鎴戜滑棣栧厛瑕佸叧娉ㄧ殑鏄殢鐫瀛樺偍鐨勬暟鎹噺鐨勫闀?鏁版嵁緇撴瀯鎬ц兘鏄庢牱闅忎箣鏀瑰彉鐨勭殑?涔熷氨鏄,姣忓綋鏁版嵁緇撴瀯涓坊鍔犱竴涓柊鍏冪礌鏃?瀹冨皢鎬庢牱褰卞搷鏁版嵁緇撴瀯鐨勮繍琛屾椂闂? 鑰冭檻榪欐牱涓縐嶆儏褰?鎴戜滑鍦ㄧ▼搴忎腑浣跨敤浜哠ystem.IO.Directory.GetFiles(璺緞)鏂規硶浠ヨ繑鍥炴枃浠剁殑鍒楄〃,瀛樻斁鍒頒竴涓壒瀹氱殑瀛楃涓叉暟緇刣irectory涓?鍋囪浣犻渶瑕佹悳绱㈣繖涓暟緇勪互鍒ゆ柇鍦ㄦ枃浠跺垪琛ㄤ腑鏄惁瀛樺湪XML鏂囦歡(鍗蟲墿灞曞悕涓?xml鐨勬枃浠?,涓縐嶆柟娉曟槸鎵弿(scan,鎴栬呮槸閬嶅巻)鏁翠釜鏁扮粍,褰撴壘鍒癤ML鏂囦歡鏃?灝辮緗竴涓爣璇?浠g爜鍙兘鏄繖鏍? using System; public class MyClass 褰撴暟鎹粨鏋勭殑闀垮害瓚嬩簬鏃犵┓澶ф椂錛屽垎鏋愬叾緇撴瀯鐨勬晥鐜囷紝鎴戜滑鎶婅繖縐嶅垎鏋愭柟娉曠О涓烘笎榪涘垎鏋愶紙asymptotic analysis)銆傛笎榪涘垎鏋愪腑甯哥敤鐨勭鍙鋒槸澶у啓鐨凮錛坆ig-Oh)錛屼互O(n)鐨勫艦寮忔弿榪伴亶鍘嗘暟緇勭殑鎬ц兘銆侽鏄湳璇涓璪ig-Oh絎﹀彿鐨勮〃紺猴紝n鍒欎唬琛ㄩ亶鍘嗘暟緇勬椂闅忛暱搴﹀闀胯屼笌涔嬬嚎褰㈠闀跨殑紼嬪簭鎵ц姝ユ暟銆?/P>
璁$畻浠g爜鍧椾腑綆楁硶鐨勮繍琛屾椂闂寸殑涓縐嶇郴緇熸柟娉曞簲閬靛驚浠ヤ笅姝ラ錛?/P>
1銆佸垽鏂粍鎴愮畻娉曡繍琛屾椂闂寸殑姝ラ銆傚鍓嶆墍榪幫紝瀵逛簬鏁扮粍鑰岃█錛屽吀鍨嬬殑姝ラ搴旀槸瀵規暟緇勮繘琛岃鍐欒闂殑鎿嶄綔銆傝屽浜庡叾浠栨暟鎹粨鏋勫垯涓嶅敖鐒躲傜壒鍒湴錛屼綘搴旇鑰冭檻鐨勬槸鏁版嵁緇撴瀯鑷韓鐨勬楠わ紝鑰屼笌璁$畻鏈哄唴閮ㄧ殑鎿嶄綔鏃犲叧銆備互涓婇潰鐨勪唬鐮佸潡涓轟緥錛岃繍琛屾椂闂村簲璇ュ彧璁$畻璁塊棶鏁扮粍鐨勬鏁幫紝鑰屼笉鐢ㄨ冭檻鍒涘緩鍜屽垵濮嬪寲鍙橀噺浠ュ強姣旇緝涓や釜瀛楃涓叉槸鍚︾浉絳夌殑鏃墮棿銆?BR>2銆佹壘鍒扮鍚堣綆楄繍琛屾椂闂存潯浠剁殑浠g爜琛屻傚湪榪欎簺琛屼笂闈㈢疆1銆?BR>3銆佸垽鏂繖浜涚疆1鐨勮鏄惁鍖呭惈鍦ㄥ驚鐜腑錛屽鏋滄槸錛屽垯灝?鏀逛負1涔樹笂寰幆鎵ц鐨勬渶澶ф鏁般傚鏋滃祵濂椾袱閲嶆垨澶氶噸寰幆錛岀戶緇寰幆鍋氱浉鍚岀殑涔樻硶銆?BR>4銆佹壘鍒板姣忚鍐欎笅鐨勬渶澶у鹼紝瀹冨氨鏄繍琛屾椂闂淬?/P>
鐜板湪鎴戜滑鎸夌収榪欑姝ラ鏉ユ爣璁頒笂闈㈢殑浠g爜鍧椼傞鍏堟垜浠凡緇忚兘澶熺‘瀹氫笌璁$畻榪愯鏃墮棿鏈夊叧鐨勪唬鐮佽錛屽啀鏍規嵁姝ラ2錛屽湪鏁扮粍fs琚闂殑涓よ浠g爜浣滀笂鏍囪錛屼竴琛屾槸鏁扮粍鍏冪礌浣滀負String.Compare()鏂規硶鐨勫弬鏁幫紝涓琛屾槸鍦–onsole.WriteLine()鏂規硶涓傛垜浠皢榪欎袱琛屾爣璁頒負1銆傜劧鍚庢牴鎹楠?錛孲tring.Compare()鏂規硶鏄湪寰幆涓紝鏈澶у驚鐜鏁頒負n錛堝洜涓烘暟緇勯暱搴︿負n錛夈傚洜姝ゅ皢璇ヨ鐨勬爣璁?鏀逛負n銆傛渶鍚庯紝鎴戜滑寰楀埌鐨勮繍琛屾椂闂村氨鏄爣璁扮殑鏈澶у糿錛岃涓篛(n)銆傦紙璇戞敞錛氬嵆涓烘暟鎹粨鏋勪腑閫氬父鎵璇寸殑鏃墮棿澶嶆潅搴︼級 O(n)錛屾垨鑰呰綰垮艦鏃墮棿(linear-time)錛岃〃紺轟簡澶氱綆楁硶榪愯鏃墮棿涓殑涓縐嶃傚叾浠栬繕鏈塐(log2 n)錛孫(n log 2 n)錛孫(n2)錛孫(2n)絳夌瓑銆傛垜浠棤欏誨叧蹇冭繖浜涚箒鏉傜殑big-Oh璁板彿錛屽彧闇瑕佺煡閬撳湪鎷彿涓殑鍊艱秺灝忥紝鍒欎唬琛ㄦ暟鎹粨鏋勭殑鎬ц兘瓚婂ソ銆備婦渚嬫潵璇達紝鏃墮棿澶嶆潅搴︼紙鍦ㄨ繖閲屾垜榪樻槸瑙夊緱鐢ㄦ椂闂村鏉傚害姣旇繍琛屾椂闂存洿鑳界悊瑙o級涓篛(log n)鐨勭畻娉曡繙姣擮(n)鏇存湁鏁堢巼錛屽洜涓簂og n 鎴戜滑闇瑕佹俯涔犱互涓嬫暟瀛︾煡璇嗐傚湪榪欓噷錛?/SPAN>log a b鍙﹀涓縐嶈〃紺烘柟娉曚負ay=b銆傚洜姝わ紝log24=2錛屽洜涓?/SPAN>22=4銆?/SPAN>Log2n澧為暱閫熷害姣斿崟涓殑n瑕佹參寰楀錛屽湪絎笁閮ㄥ垎鎴戜滑灝嗚冨療鏃墮棿澶嶆潅搴︿負O(log2n)鐨勪簩鍙夋爲緇撴瀯銆傦紙榪欎釜娉ㄩ噴娌″澶ф剰鎬濆晩錛侊級
鍦ㄨ繖綃囩郴鍒楁枃绔犱腑錛屾垜浠皢璁$畻姣忎竴縐嶆柊鐨勬暟鎹粨鏋勫拰瀹冧滑鐨勬笎榪涙搷浣滆繍琛屾椂闂達紝騫墮氳繃鐩鎬技鐨勬搷浣滄瘮杈冨叾浠栨暟鎹粨鏋勫湪榪愯鏃墮棿涓婄殑鍖哄埆銆?/P>
鏁扮粍錛氫竴縐嶇嚎褰㈢殑錛屽彲浠ョ洿鎺ヨ闂殑錛屽崟涓鏁版嵁緇撴瀯 鍦ㄧ▼搴忕紪鍐欎腑錛屾暟緇勬槸鏈綆鍗曚篃鏄渶騫挎硾浣跨敤鐨勬暟鎹粨鏋勩傚湪鎵鏈夌殑紼嬪簭璇█涓暟緇勯兘鍏峰浠ヤ笅鍏卞悓鐨勫睘鎬э細 浠ヤ笅鏄暟緇勫父鐢ㄧ殑鎿嶄綔錛?BR>1錛庡垎閰嶇┖闂?BR>2錛庢暟鎹闂?BR>3錛庢暟緇勭┖闂撮噸鍒嗛厤錛圧edimensioning錛?/P>
鍦–#閲屽0鏄庢暟緇勬椂錛屾暟緇勪負絀哄鹼紙null錛夈備笅闈㈢殑浠g爜鍒涘緩浜嗕竴涓悕涓篵ooleanArray鐨勬暟緇勫彉閲忥紝鍏跺間負絀猴紙null錛夛細 Bool [] boolleanArray; 鍦ㄤ嬌鐢ㄨ鏁扮粍鏃訛紝蹇呴』鐢ㄤ竴涓壒瀹氭暟瀛楃粰瀹冨垎閰嶇┖闂達紝濡備笅鎵紺猴細 booleanArray = new bool[10]; 閫氱敤鐨勮〃榪頒負錛?/P>
arrayName = new arrayType[allocationSize]; 瀹冨皢鍦–LR鎵樼鍫嗛噷鍒嗛厤涓鍧楄繛緇殑鍐呭瓨絀洪棿錛岃凍浠ュ綰蟲暟鎹被鍨嬩負arrayTypes銆佷釜鏁頒負allocationSize鐨勬暟緇勫厓绱犮傚鏋渁rrayType涓哄肩被鍨嬶紙璇戞敞錛氬int綾誨瀷錛夛紝鍒欐湁allocationSize涓湭灝佺錛坲nboxed錛夌殑arrayType鍊艱鍒涘緩銆傚鏋渁rrayType涓哄紩鐢ㄧ被鍨?璇戞敞錛氬string綾誨瀷)錛屽垯鏈塧llocationSize涓猘rrayType寮曠敤綾誨瀷鍊艱鍒涘緩銆傦紙濡傛灉浣犲鍊肩被鍨嬪拰寮曠敤綾誨瀷銆佹墭綆″爢鍜屾爤涔嬮棿鐨勫尯鍒笉鐔熸倝錛岃鏌ラ槄鈥滅悊瑙?Net鍏叡綾誨瀷緋葷粺Common Type System鈥濓級 涓哄府鍔╃悊瑙?Net Framework涓暟緇勭殑鍐呴儴瀛樺偍鏈哄埗錛岃鐪嬩笅闈㈢殑渚嬪瓙錛?/P>
arrayName = new arrayType[allocationSize]; This allocates a contiguous block of memory in the CLR-managed heap large enough to hold the allocationSize number of arrayTypes. If arrayType is a value type, then allocationSize number of unboxed arrayType values are created. If arrayType is a reference type, then allocationSize number of arrayType references are created. (If you are unfamiliar with the difference between reference and value types and the managed heap versus the stack, check out Understanding .NET's Common Type System.) To help hammer home how the .NET Framework stores the internals of an array, consider the following example: bool [] booleanArray; booleanArray = new bool[10]; 榪欓噷錛宐ooleanArray鏄肩被鍨婼ystem.Boolean鏁扮粍錛岃宖iles鏁扮粍鍒欐槸寮曠敤綾誨瀷System.IO.FileInfo鏁扮粍銆傚浘涓鏄劇ず浜嗘墽琛岃繖鍥涜浠g爜鍚嶤LR鎵樼鍫嗙殑鎯呭喌銆?BR> 璇瘋浣忓湪files鏁扮粍涓瓨鏀劇殑鍗佷釜鍏冪礌鎸囧悜鐨勬槸FileInfo瀹炰緥銆傚浘浜屽己璋冧簡榪欎竴鐐癸紙hammers home this point錛屾湁浜涗繗璇殑鎰熻錛屼笉鐭ラ亾鎬庝箞緲昏瘧錛夛紝鏄劇ず浜嗗鏋滄垜浠負files鏁扮粍涓殑FileInfo瀹炰緥鍒嗛厤涓浜涘煎悗鍐呭瓨鐨勫垎甯冩儏鍐點?BR> // 璇諱竴涓暟緇勫厓绱?BR>bool b = booleanArray[7]; // 鍐欎竴涓暟緇勫厓绱狅紝鍗寵祴鍊?BR>booleanArray[0] = false; 璁塊棶涓涓暟緇勫厓绱犵殑榪愯鏃墮棿琛ㄧず涓篛(1)錛屽洜涓哄瀹冪殑璁塊棶鏃墮棿鏄笉鍙樼殑銆傞偅灝辨槸璇達紝涓嶇鏁扮粍瀛樺偍浜嗗灝戝厓绱狅紝鏌ユ壘涓涓厓绱犳墍鑺辯殑鏃墮棿閮芥槸鐩稿悓鐨勩傝繍琛屾椂闂翠箣鎵浠ヤ笉鍙橈紝鏄洜涓烘暟緇勫厓绱犳槸榪炵畫瀛樻斁鐨勶紝鏌ユ壘瀹氫綅鐨勬椂鍊欏彧闇瑕佺煡閬撴暟緇勫湪鍐呭瓨涓殑璧峰浣嶇疆錛屾瘡涓厓绱犵殑澶у皬錛屼互鍙婂厓绱犵殑绱㈠紩鍊箋?/P>
鍦ㄦ墭綆′唬鐮佷腑錛屾暟緇勭殑鏌ユ壘姣斿疄闄呯殑瀹炵幇紼嶅井澶嶆潅涓浜涳紝鍥犱負鍦–LR涓闂瘡涓暟緇勶紝閮借紜繚绱㈠紩鍊煎湪鍏惰竟鐣屼箣鍐呫傚鏋滄暟緇勭儲寮曡秴鍑鴻竟鐣岋紝浼氭姏鍑篒ndexOutOfRangeException寮傚父銆傝繖縐嶈竟鐣屾鏌ユ湁鍔╀簬紜繚鎴戜滑鍦ㄨ闂暟緇勪笉鑷充簬鎰忓鍦拌秴鍑烘暟緇勮竟鐣岃岃繘鍏ュ彟澶栦竴鍧楀唴瀛樺尯銆傝屼笖瀹冧笉浼氬獎鍝嶆暟緇勮闂殑鏃墮棿錛屽洜涓烘墽琛岃竟鐣屾鏌ユ墍闇鏃墮棿騫朵笉闅忔暟緇勫厓绱犵殑澧炲姞鑰屽鍔犮?/P>
娉細濡傛灉鏁扮粍鍏冪礌鐗瑰埆澶氾紝绱㈠紩杈圭晫媯鏌ヤ細瀵瑰簲鐢ㄧ▼搴忕殑鎵ц鎬ц兘鏈夌◢璁稿獎鍝嶃傝屽浜庨潪鎵樼浠g爜錛岃繖縐嶈竟鐣屾鏌ュ氨琚拷鐣ヤ簡銆傝浜嗚В鏇村淇℃伅錛岃鍙傝僇effrey Richter鎵钁楃殑Applied Microsoft .NET Framework Programming絎?4绔犮?/P>
浣跨敤鏁扮粍鏃訛紝浣犱篃璁擱渶瑕佹敼鍙樻暟緇勫ぇ灝忋傚彲浠ラ氳繃鏍規嵁鐗瑰畾鐨勯暱搴﹀ぇ灝忓垱寤轟竴涓柊鏁扮粍瀹炰緥錛屽茍灝嗘棫鏁扮粍鐨勫唴瀹規嫹璐濆埌鏂版暟緇勶紝鏉ュ疄鐜拌鎿嶄綔銆傛垜浠О榪欎竴榪囩▼涓烘暟緇勭┖闂撮噸鍒嗛厤(redimensioning)錛屽涓嬩唬鐮侊細 using System; public class MyClass // 灝唂ib鏁扮粍鍐呭鎷瘋礉鍒頒復鏃舵暟緇?BR> fib.CopyTo(temp, 0); 鍦ㄤ唬鐮佺殑鏈鍚庝竴琛岋紝fib鎸囧悜鍖呭惈10涓厓绱犵殑Int32綾誨瀷鏁扮粍銆侳ib鏁扮粍涓?鍒?錛堣瘧娉細娉ㄦ剰涓嬫爣浠?寮濮嬶級鐨勫厓绱犲奸粯璁や負0錛圛nt32綾誨瀷錛夈?/P>
褰撴垜浠瀛樺偍鍚岀綾誨瀷鐨勬暟鎹紙鍘熸枃涓篽eterogeneous types鈥斺斿紓綾繪暟鎹被鍨嬶紝鎴戞鐤戞湁璇級騫朵粎闇瑕佺洿鎺ヨ闂暟鎹椂錛屾暟緇勬槸杈冨ソ鐨勬暟鎹粨鏋勩傛悳绱㈡湭鎺掑簭鐨勬暟緇勬椂闂村鏉傚害鏄嚎褰㈢殑銆傚綋鎴戜滑瀵瑰皬鍨嬫暟緇勮繘琛屾搷浣滐紝鎴栧緢灝戝瀹冭繘琛屾煡璇㈡搷浣滄椂錛屾暟緇勮繖縐嶇粨鏋勬槸鍙互鎺ュ彈鐨勩備絾褰撲綘鐨勫簲鐢ㄧ▼搴忛渶瑕佸瓨鍌ㄥぇ閲忔暟鎹紝涓旈綣佽繘琛屾煡璇㈡搷浣滄椂錛屾湁寰堝鍏朵粬鏁版嵁緇撴瀯鏇磋兘閫傚簲浣犵殑宸ヤ綔銆傛垜浠潵鐪嬬湅鏈枃鎺ヤ笅鏉ュ皢瑕佷粙緇嶇殑涓浜涙暟鎹粨鏋勩傦紙濡傛灉浣犺鏍規嵁鏌愪釜灞炴ф煡鎵炬暟緇勶紝涓旀暟緇勬槸鏍規嵁璇ュ睘鎬ц繘琛屾帓搴忕殑錛屼綘鍙互浣跨敤浜屽弶娉曪紙binary search錛夊鍏舵悳绱紝瀹冪殑鏃墮棿澶嶆潅搴︿負O(log n)錛屼笌鍦ㄤ簩鍙夋爲涓悳绱㈢殑鏃墮棿澶嶆潅搴︾浉鍚屻備簨瀹炰笂錛屾暟緇勭被涓寘鍚簡涓涓潤鎬佹柟娉旴inarySearch()銆傚瑕佷簡瑙h鏂規硶鐨勬洿澶氫俊鎭紝璇峰弬鑰冩垜鏃╂湡鐨勪竴綃囨枃绔犫滄湁鏁堝湴鎼滅儲鏈夊簭鏁扮粍鈥濄?/P>
娉細.Net Framework鍚屾牱鏀寔澶氱淮鏁扮粍銆備笌涓緇存暟緇勪竴鏍鳳紝澶氱淮鏁扮粍瀵規暟鎹厓绱犵殑璁塊棶榪愯鏃墮棿浠嶇劧鏄笉鍙樼殑銆傚洖鎯充竴涓嬫垜浠墠闈粙緇嶇殑鍦╪涓厓绱犵殑涓緇存暟緇勪腑鏌ヨ鎿嶄綔鐨勬椂闂村鏉傚害涓篛(n)銆傚浜庝竴涓猲xn鐨勪簩緇存暟緇勶紝鏃墮棿澶嶆潅搴︿負O(n2)錛屽洜涓烘瘡嬈℃悳绱㈤兘瑕佹鏌2涓厓绱犮備互姝ょ被鎺紝k緇存暟緇勬悳绱㈢殑鏃墮棿澶嶆潅搴︿負O錛坣k錛夈?/P>
ArrayList錛氬彲瀛樺偍涓嶅悓綾誨瀷鏁版嵁銆佽嚜澧為暱鐨勬暟緇?/P>
鏄庣‘鍦幫紝鏁扮粍鍦ㄨ璁℃椂鍙楀埌涓浜涢檺鍒訛紝鍥犱負涓緇存暟緇勫彧鑳藉瓨鍌ㄧ浉鍚岀被鍨嬬殑鏁版嵁錛岃屼笖鍦ㄤ嬌鐢ㄦ暟緇勬椂錛屽繀欏諱負鏁扮粍瀹氫箟鐗瑰畾鐨勯暱搴︺傚緢澶氭椂鍊欙紝寮鍙戜漢鍛樿姹傛暟緇勬洿鍔犵伒媧伙紝瀹冨彲浠ュ瓨鍌ㄤ笉鍚岀被鍨嬬殑鏁版嵁錛屼篃涓嶇敤鍘誨叧蹇冩暟緇勭┖闂寸殑鍒嗛厤銆傚湪.Net Framework鍩虹被搴撲腑鎻愪緵浜嗘弧瓚寵繖鏍鋒潯浠剁殑鏁版嵁緇撴瀯鈥斺擲ystem.Collections.ArrayList銆?/P>
濡備笅鐨勪竴灝忔浠g爜鏄疉rrayList鐨勭ず渚嬨傛敞鎰忓埌浣跨敤ArrayList鏃跺彲浠ユ坊鍔犱換鎰忕被鍨嬬殑鏁版嵁錛屼笖涓嶉渶瑕佸垎閰嶇┖闂淬傛墍鏈夌殑榪欎簺閮界敱緋葷粺鎺у埗銆?/P>
ArrayList countDown = new ArrayList(); 浠庢繁灞傛鐨勫惈涔夋潵璁詫紝ArrayList浣跨敤鐨勫瓨鏀劇被鍨嬩負object鐨凷ystem.Array瀵硅薄銆傛棦鐒舵墍鏈夌被鍨嬮兘鏄洿鎺ユ垨闂存帴浠巓bject媧劇敓錛岃嚜鐒朵竴涓猳bject綾誨瀷鐨勬暟緇勪篃鍙互瀛樻斁浠諱綍綾誨瀷鐨勫厓绱犮侫rrayList榛樿鍒涘緩16涓猳bject綾誨瀷鍏冪礌鐨勬暟緇勶紝褰撶劧鎴戜滑涔熷彲浠ラ氳繃鏋勯犲嚱鏁頒腑鐨勫弬鏁版垨璁劇疆Capacity灞炴ф潵瀹氬埗ArrayList澶у皬銆傞氳繃Add()鏂規硶娣誨姞鏂板厓绱狅紝鏁扮粍鍐呴儴鑷姩媯鏌ュ叾瀹歸噺銆傚鏋滄坊鍔犳柊鍏冪礌瀵艱嚧瓚婄晫錛屽垯瀹歸噺鍒欒嚜鍔ㄦ垚鍊嶅鍔狅紝鎴戜滑縐頒負鑷闀褲?/P>
ArrayList鍜孉rray涓鏍鳳紝涔熷彲浠ラ氳繃绱㈠紩鐩存帴璁塊棶錛?/P>
// Read access // Write access // 浼氫駭鐢烝rgumentOutOfRange 寮傚父 鏃㈢劧ArrayList瀛樺偍鐨勬槸object綾誨瀷鐨勫厓绱狅紝鍥犳浠嶢rrayList涓鍏冪礌鏃跺簲璇ユ樉紺虹殑鎸囧畾綾誨瀷杞崲銆傚悓鏃惰娉ㄦ剰鐨勬槸錛屽鏋滀綘璁塊棶鐨勬暟緇勫厓绱犺秴榪嘇rrayList鐨勯暱搴︼紝緋葷粺浼氭姏鍑篠ystem.ArgumentOutOfRange寮傚父銆?/P>
ArrayList鎻愪緵浜嗘爣鍑嗘暟緇勬墍涓嶅叿澶囩殑鑷闀跨伒媧繪э紝浣嗚繖縐嶇伒媧繪ф槸浠ョ壓鐗叉ц兘涓轟唬浠風殑錛屽挨鍏舵槸褰撴垜浠瓨鍌ㄧ殑鏄肩被鍨嬧斺斾緥濡係ystem.Int32錛孲ystem.Double錛孲ystem.Boolean絳夈傚畠浠湪鎵樼鍫嗕腑鏄互鏈皝綆卞艦寮?unboxed form)榪炵畫瀛樻斁鐨勩傜劧鑰岋紝ArrayList鐨勫唴閮ㄦ満鍒舵槸涓涓紩鐢ㄧ殑object瀵硅薄鏁扮粍錛涘洜姝わ紝鍗充嬌ArrayList涓彧瀛樻斁浜嗗肩被鍨嬶紝榪欎簺鍏冪礌浠嶇劧浼氶氳繃灝佺錛坆oxing錛夎漿鎹負寮曠敤綾誨瀷銆傚鍥句笁鎵紺猴細 鍥句笁錛氬瓨鍌ㄨ繛緇潡鐨刼bject寮曠敤鐨凙rrayList 鍦ˋrrayList涓嬌鐢ㄥ肩被鍨嬶紝灝嗛澶栬繘琛屽皝綆?boxing)鍜屾挙綆?unboxing)鎿嶄綔錛屽綋浣犵殑搴旂敤紼嬪簭鏄竴涓緢澶х殑ArrayList錛屽茍棰戠箒榪涜璇誨啓鎿嶄綔鏃訛紝浼氬緢澶х▼搴︿笂褰卞搷紼嬪簭鎬ц兘銆傚鍥?鎵紺猴紝瀵逛簬寮曠敤綾誨瀷鑰岃█錛孉rrayList鍜屾暟緇勭殑鍐呭瓨鍒嗛厤鏄浉鍚岀殑銆?/P>
姣旇緝鏁扮粍鑰岃█錛孉rrayList鐨勮嚜澧為暱騫朵笉浼氬鑷翠換浣曟ц兘鐨勪笅闄嶃傚鏋滀綘鐭ラ亾瀛樺偍鍒癆rrayList鐨勫厓绱犵殑鍑嗙‘鏁伴噺錛屽彲浠ラ氳繃ArrayList鏋勯犲嚱鏁板垵濮嬪寲瀹歸噺浠ュ叧闂叾鑷闀垮姛鑳姐傝屽浜庢暟緇勶紝褰撲綘涓嶇煡閬撳叿浣撳閲忔椂錛屼笉寰椾笉鍦ㄦ彃鍏ョ殑鏁版嵁鍏冪礌瓚呰繃鏁扮粍闀垮害鐨勬椂鍊欙紝鎵嬪姩鏀瑰彉鏁扮粍鐨勫ぇ灝忋?/P>
涓涓粡鍏哥殑璁$畻鏈虹瀛﹂棶棰樻槸錛氬綋紼嬪簭榪愯鏃惰秴鍑轟簡緙撳瓨絀洪棿錛屽簲璇ュ垎閰嶅灝戞柊鐨勭┖闂翠負鏈浣熾備竴縐嶆柟妗堟槸鏄師鏉ュ垎閰嶇┖闂寸殑鍩虹涓婃瘡嬈″姞1銆備緥濡傛暟緇勬渶鍒濆垎閰嶄簡5涓厓绱狅紝閭d箞鍦ㄦ彃鍏ョ6涓厓绱犱箣鍓嶏紝灝嗗叾闀垮害澧炲姞涓?銆傛樉鐒訛紝榪欑鏂規鏈澶х▼搴︿笂鑺傜害浜嗗唴瀛樼┖闂達紝浣嗕唬浠峰お澶э紝鍥犱負姣忔彃鍏ヤ竴涓柊鍏冪礌閮借榪涜涓嬈″啀鍒嗛厤鎿嶄綔銆?/P>
鍙︿竴縐嶆柟妗堝垰濂界浉鍙嶏紝涔熷氨鏄瘡嬈″垎閰嶉兘鍦ㄥ師鏉ュぇ灝忕殑鍩虹涓婂鍔?00鍊嶃傚鏋滄暟緇勬渶鍒濆垎閰嶄簡5涓厓绱狅紝閭d箞鍦ㄦ彃鍏ョ6涓厓绱犱箣鍓嶏紝鏁扮粍絀洪棿澧為暱涓?00銆傛樉鐒訛紝璇ユ柟妗堝ぇ澶у湴鍑忓皯浜嗗啀鍒嗛厤鎿嶄綔鐨勬鏁幫紝浣嗕粎褰撴彃鍏ユ瀬灝戠殑鏁版嵁鍏冪礌鏃訛紝灝變細鏈変笂鐧劇殑鍏冪礌絀洪棿鏈嬌鐢紝瀹炲湪澶氮璐圭┖闂翠簡錛?/P>
ArrayList鐨勬笎榪戣繍琛屾椂闂村拰鏍囧噯鏁扮粍涓鏍楓傚嵆浣垮ArrayList鐨勬搷浣滄槸楂樺紑閿鐨勶紝灝ゅ叾鏄瓨鍌ㄥ肩被鍨嬶紝鍏跺厓绱犱釜鏁板拰姣忔鎿嶄綔鐨勪唬浠蜂箣闂寸殑鍏崇郴涓庢爣鍑嗘暟緇勭浉鍚屻?BR>
using System.Collections;
{
private static Hashtable ages = new Hashtable();
{
// Add some values to the Hashtable, indexed by a string key
ages.Add("Scott", 25);
ages.Add("Sam", 6);
ages.Add("Jisun", 25);
// Access a particular key
if (ages.ContainsKey("Scott"))
{
int scottsAge = (int) ages["Scott"];
Console.WriteLine("Scott is " + scottsAge.ToString());
}
else
Console.WriteLine("Scott is not in the hash table...");
}
}
紼嬪簭涓殑ContainsKey()鏂規硶錛屾槸鏍規嵁鐗瑰畾鐨刱ey鍒ゆ柇鏄惁瀛樺湪絎﹀悎鏉′歡鐨勫厓绱狅紝榪斿洖甯冨皵鍊箋侶ashtable綾諱腑鍖呭惈keys灞炴э紙property錛夛紝榪斿洖鍝堝笇琛ㄤ腑浣跨敤鐨勬墍鏈夊叧閿瓧鐨勯泦鍚堛傝繖涓睘鎬у彲浠ラ氳繃閬嶅巻璁塊棶錛屽涓嬶細
foreach(string key in ages.Keys)
Console.WriteLine("Value at ages[\"" + key + "\"] = " + ages[key].ToString());
Value at ages["Scott"] = 25
Value at ages["Sam"] = 6
Hk(key) = [GetHash(key) + k * (1 + (((GetHash(key) >> 5) + 1) % (hashsize 鈥?1)))] % hashsize
1錛?nbsp;鍝堝笇琛ㄧ殑浣嶇疆絀洪棿榪戜技鍦版垚鍊嶅鍔犮傚噯紜湴璇達紝浣嶇疆絀洪棿鍊間粠褰撳墠鐨勭礌鏁板煎鍔犲埌涓嬩竴涓渶澶х殑绱犳暟鍊箋傦紙鍥炴兂涓涓嬪墠闈㈣鍒扮殑浜屽害鍝堝笇鐨勫伐浣滃師鐞嗭紝鍝堝笇琛ㄧ殑浣嶇疆絀洪棿鍊煎繀欏繪槸绱犳暟銆傦級
2錛?nbsp;鏃㈢劧浜屽害鍝堝笇鏃訛紝鍝堝笇琛ㄤ腑鐨勬墍鏈夊厓绱犲煎皢渚濊禆浜庡搱甯岃〃鐨勪綅緗┖闂村鹼紝鎵浠ヨ〃涓墍鏈夊間篃闇瑕佷簩搴﹀搱甯岋紙鍥犱負鍦ㄧ涓姝ヤ腑浣嶇疆絀洪棿鍊煎鍔犱簡錛夈?/P>
]]>
鏈枃鏄粙緇嶅湪.Net騫沖彴涓嬩嬌鐢ㄦ暟鎹粨鏋勭殑緋誨垪鏂囩珷,鍏卞垎涓哄叚閮ㄥ垎,榪欐槸鏈枃鐨勭涓閮ㄥ垎.鏈枃璇曞浘鑰冨療鍑犵鏁版嵁緇撴瀯,鍏朵腑鏈夌殑鍖呭惈鍦?Net Framework鐨勫熀綾誨簱涓?鏈夌殑鏄垜浠嚜宸卞垱寤虹殑.濡傛灉浣犲榪欎簺鍚嶈瘝涓嶅お鐔熸倝,閭d箞鎴戜滑鍙互鎶婃暟鎹粨鏋勭湅浣滄槸涓縐嶆娊璞$粨鏋勬垨鏄被,瀹冮氬父鐢ㄦ潵緇勭粐鏁版嵁,騫舵彁渚涘鏁版嵁鐨勬搷浣?鏈甯歌騫朵負鎴戜滑鎵鐔熺煡鐨勬暟鎹粨鏋勫氨鏄暟緇刟rray,瀹冨寘鍚簡涓緇勮繛緇殑鏁版嵁,騫墮氳繃绱㈠紩榪涜璁塊棶.
鏁版嵁緇撴瀯鎬ц兘鍒嗘瀽
using System.Collections;
using System.IO;
{
public static void Main()
{
string [] fs = Directory.GetFiles(@"C:\Inetpub\wwwroot");
bool foundXML = false;
int i = 0;
for (i = 0; i < fs.Length; i++)
if (String.Compare(Path.GetExtension(fs[i]), ".xml", true) == 0)
{
foundXML = true;
break;
}
if (foundXML)
Console.WriteLine("XML file found - " + fs[i]);
else
Console.WriteLine("No XML files found.");
}
}
鐜板湪鎴戜滑鏉ョ湅鐪嬫渶緋熺硶鐨勪竴縐嶆儏鍐?褰撹繖涓垪琛ㄤ腑涓嶅瓨鍦╔ML鏂囦歡鎴栬匵ML鏂囦歡鏄湪鍒楄〃鐨勬渶鍚?鎴戜滑灝嗕細鎼滅儲瀹岃繖涓暟緇勭殑鎵鏈夊厓绱?鍐嶆潵鍒嗘瀽涓涓嬫暟緇勭殑鏁堢巼,鎴戜滑蹇呴』闂棶鑷繁,"鍋囪鏁扮粍涓幇鏈塶涓厓绱?濡傛灉鎴戞坊鍔犱竴涓柊鍏冪礌,澧為暱涓簄+1涓厓绱?閭d箞鏂扮殑榪愯鏃墮棿鏄灝?(鏈"榪愯鏃墮棿"--running time,涓嶈兘欏懼悕鎬濅箟鍦拌涓烘槸紼嬪簭榪愯鎵娑堣楃殑緇濆鏃墮棿,鑰屾寚鐨勬槸紼嬪簭瀹屾垚璇ヤ換鍔℃墍蹇呴』鎵ц鐨勬楠ゆ暟.浠ユ暟緇勮岃█,榪愯鏃墮棿鐗瑰畾琚涓烘槸璁塊棶鏁扮粍鍏冪礌鎵闇鎵ц鐨勬楠ゆ暟銆?瑕佹悳绱㈡暟緇勪腑鐨勪竴涓鹼紝娼滃湪鐨勫彲鑳芥槸璁塊棶鏁扮粍鐨勬瘡涓涓厓绱狅紝濡傛灉鏁扮粍涓湁n+1涓厓绱狅紝灝卞皢鎵цn+1嬈℃鏌ャ傞偅灝辨槸璇達紝鎼滅儲鏁扮粍鑰楄垂鐨勬椂闂翠笌鏁扮粍鍏冪礌涓暟鎴愬嚑浣曠嚎褰㈡瘮銆?/P>
娉細
1錛庢暟緇勭殑鏁版嵁瀛樺偍鍦ㄤ竴孌佃繛緇殑鍐呭瓨涔嬩腑錛?BR>2錛庢暟緇勭殑鎵鏈夊厓绱犻兘蹇呴』鏄悓涓縐嶆暟鎹被鍨嬶紝鍥犳鏁扮粍鍙堣璁や負鏄崟涓鏁版嵁緇撴瀯(homogeneous data structures)錛?BR>3錛庢暟緇勫厓绱犲彲浠ョ洿鎺ヨ闂傦紙鍦ㄥ緢澶氭暟鎹粨鏋勪腑錛岃繖涓鐗圭偣鏄笉蹇呰鐨勩備緥濡傦紝鏂囩珷絎洓閮ㄥ垎浠嬬粛鐨勬暟鎹粨鏋凷kipList銆傝璁塊棶SkipList涓殑鐗瑰畾鍏冪礌錛屼綘蹇呴』鏍規嵁鎼滅儲鍏朵粬鍏冪礌鐩村埌鎵懼埌鎼滅儲瀵硅薄涓烘銆傜劧鑰屽浜庢暟緇勮岃█錛屽鏋滀綘鐭ラ亾浣犺鏌ユ壘絎琲涓厓绱狅紝灝卞彲浠ラ氳繃arrayName[i]鏉ヨ闂畠銆傦級錛堣瘧娉細寰堝璇█閮借瀹氭暟緇勭殑涓嬫爣浠?寮濮嬶紝鍥犳璁塊棶絎琲涓厓绱狅紝搴斾負arrayName[i-1]錛?/P>
FileInfo [] files;
files = new FileInfo[10];
鍥句竴錛氬湪鎵樼鍫嗕腑欏哄簭瀛樻斁鏁扮粍鍏冪礌
鍥句簩錛氬湪鎵樼鍫嗕腑欏哄簭瀛樻斁鏁扮粍鍏冪礌
.Net涓墍鏈夋暟緇勯兘鏀寔瀵瑰厓绱犵殑璇誨啓鎿嶄綔銆傝闂暟緇勫厓绱犵殑璇硶鏍煎紡濡備笅錛?/P>
using System.Collections;
{
public static void Main()
{
// 鍒涘緩鍖呭惈3涓厓绱犵殑int綾誨瀷鏁扮粍
int [] fib = new int[3];
fib[0] = 1;
fib[1] = 1;
fib[2] = 2;
// 閲嶆柊鍒嗛厤鏁扮粍錛岄暱搴︿負10
int [] temp = new int[10];
// 灝嗕復鏃舵暟緇勮祴緇檉ib
fib = temp;
}
}
countDown.Add(5);
countDown.Add(4);
countDown.Add(3);
countDown.Add(2);
countDown.Add(1);
countDown.Add("blast off!");
countDown.Add(new ArrayList());
int x = (int) countDown[0];
string y = (string) countDown[5];
countDown[1] = 5;
countDown[7] = 5;
]]>
]]>