锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产日韩视频,欧美亚洲综合在线,亚洲淫性视频http://www.shnenglu.com/mzty/category/1588.html<br/> <br/> <a href = "http://www.shnenglu.com/mzty/archive/2007/03/02/19109.html"><font size = 5 color ="#00FFFF">{C++ 鍩虹}<font/></a> <a href = "http://www.shnenglu.com/mzty/archive/2007/08/13/29922.html"><font size = 5 color ="#00FFFF">{C++ 楂樼駭}<font/></a> <a href = "http://www.shnenglu.com/mzty/archive/2007/04/16/22064.html"><font size = 5 color ="#00FFFF">{C#鐣岄潰錛孋++鏍稿績綆楁硶}<font/></a> <a href = "http://www.shnenglu.com/mzty/archive/2007/03/04/19163.html"><font size = 5 color ="#00FFFF">{璁捐妯″紡}<font/></a> <a href = " http://www.shnenglu.com/mzty/archive/2007/03/04/19167.html"><font size = 5 color ="#FF0000">{C#鍩虹}<font/></a> zh-cnMon, 19 May 2008 17:09:08 GMTMon, 19 May 2008 17:09:08 GMT60Native c++ 鍜孧anaged 鐨?interophttp://www.shnenglu.com/mzty/archive/2006/08/17/11354.html姊﹀湪澶╂動姊﹀湪澶╂動Thu, 17 Aug 2006 08:26:00 GMThttp://www.shnenglu.com/mzty/archive/2006/08/17/11354.htmlhttp://www.shnenglu.com/mzty/comments/11354.htmlhttp://www.shnenglu.com/mzty/archive/2006/08/17/11354.html#Feedback5http://www.shnenglu.com/mzty/comments/commentRss/11354.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/11354.html4縐嶆柟娉?

There are four main ways to do interop in .NET between the managed and native worlds. COM interop can be accomplished using Runtime Callable Wrappers (RCW) and COM Callable Wrappers (CCW). The common language runtime (CLR) is responsible for type marshaling (except in the rare scenarios where a custom marshaler is used) and the cost of these calls can be expensive. You need to be careful that the interfaces are not too chatty; otherwise a large performance penalty could result. You also need to ensure that the wrappers are kept up to date with the underlying component. That said, COM interop is very useful for simple interop scenarios where you are attempting to bring in a large amount of native COM code.

The second option for interop is to use P/Invoke. This is accomplished using the DllImport attribute, specifying the attribute on the method declaration for the function you want to import. Marshaling is handled according to how it has been specified in the declaration. However, DllImport is only useful if you have code that exposes the required functions through a DLL export.

When you need to call managed code from native code, CLR hosting is an option. In such a scenario, the native application has to drive all of the execution: setting up the host, binding to the runtime, starting the host, retrieving the appropriate AppDomain, setting up the invocation context, locating the desired assembly and class, and invoking the operation on the desired class. This is definitely one of the most robust solutions in terms of control over what and when things happen, but it is also incredibly tedious and requires a lot of custom code.

The fourth option, and quite possibly the easiest and the most performant, is to use the interop capabilities in C++. By throwing the /clr switch, the compiler generates MSIL instead of native machine code. The only code that is generated as native machine code is code that just can't be compiled to MSIL, including functions with inline asm blocks and operations that use CPU-specific intrinsics such as Streaming SIMD Extensions (SSE). The /clr switch is how the Quake II port to .NET was accomplished. The Vertigo software team spent a day porting the original C code for the game to code that successfully compiled as C++ and then threw the /clr switch. In no time they were up and running on the .NET Framework. Without adding any additional binaries and simply by including the appropriate header files, managed C++ and native C++ can call each other without any additional work on the part of the developer. The compiler handles the creation of the appropriate thunks to go back and forth between the two worlds.



姊﹀湪澶╂動 2006-08-17 16:26 鍙戣〃璇勮
]]>
Visual C++ 緙栬瘧鍣ㄩ夐」http://www.shnenglu.com/mzty/archive/2006/08/17/11336.html姊﹀湪澶╂動姊﹀湪澶╂動Thu, 17 Aug 2006 04:16:00 GMThttp://www.shnenglu.com/mzty/archive/2006/08/17/11336.htmlhttp://www.shnenglu.com/mzty/comments/11336.htmlhttp://www.shnenglu.com/mzty/archive/2006/08/17/11336.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/11336.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/11336.html 鏉ヨ嚜msdn:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_compiler_options_listed_by_category.asp

浼樺寲

/O1 鍒涘緩灝忎唬鐮?/td>
/O2 鍒涘緩蹇熶唬鐮?/td>
/Oa 鍋囪娌℃湁鍒悕
/Ob 鎺у埗鍐呰仈灞曞紑
/Od 紱佺敤浼樺寲
/Og 浣跨敤鍏ㄥ眬浼樺寲
/Oi 鐢熸垚鍐呴儴鍑芥暟
/Op 鏀瑰杽嫻偣鏁頒竴鑷存?/td>
/Os 浠g爜澶у皬浼樺厛
/Ot 浠g爜閫熷害浼樺厛
/Ow 鍋囧畾鍦ㄥ嚱鏁拌皟鐢ㄤ腑浣跨敤鍒悕
/Ox 浣跨敤鏈澶т紭鍖?(/Ob2gity /Gs)
/Oy 鐪佺暐妗嗘灦鎸囬拡

浠g爜鐢熸垚

/arch 浣跨敤 SSE 鎴?SSE2 鎸囦護鐢熸垚浠g爜
/clr 鍚敤 C++ 鐨勬墭綆℃墿灞曞茍浜х敓鍦ㄥ叕鍏辮璦榪愯搴撲笂榪愯鐨勮緭鍑烘枃浠?/td>
/EH 鎸囧畾寮傚父澶勭悊妯″瀷
/G3 浼樺寲浠g爜浠ヤ紭閫?386 澶勭悊鍣ㄣ傚湪 Visual C++ 5.0 涓凡緇忓仠鐢紝緙栬瘧鍣ㄥ皢蹇界暐姝ら夐」
/G4 浼樺寲浠g爜浠ヤ紭閫?486 澶勭悊鍣ㄣ傚湪 Visual C++ 5.0 涓凡緇忓仠鐢紝緙栬瘧鍣ㄥ皢蹇界暐姝ら夐」
/G5 浼樺寲浠g爜浠ヤ紭閫?Pentium
/G6 浼樺寲浠g爜浠ヤ紭閫?Pentium Pro銆丳entium II 鍜?Pentium III 澶勭悊鍣?/td>
/G7 閽堝 Pentium 4 鎴?Athlon 浼樺寲浠g爜銆?/td>
/GB 涓?/G6 絳夋晥錛涘皢 _M_IX86 鐨勫艱緗負 600
/Gd 浣跨敤 __cdecl 璋冪敤綰﹀畾
/Ge 嬋媧誨爢鏍堟帰嫻?/td>
/GF
/Gf
鍚敤瀛楃涓叉睜
/Gh 璋冪敤鎸傞挬鍑芥暟 _penter
/GH 璋冪敤鎸傞挬鍑芥暟 _pexit
/GL 鍚敤鍏ㄧ▼搴忎紭鍖?/td>
/Gm 鍚敤鏈灝忛噸鏂扮敓鎴?/td>
/GR 鍚敤榪愯鏃剁被鍨嬩俊鎭?(RTTI)
/Gr 浣跨敤 __fastcall 璋冪敤綰﹀畾
/Gs 鎺у埗鍫嗘爤鎺㈡祴
/GT 鏀寔浣跨敤闈欐佺嚎紼嬫湰鍦板瓨鍌ㄥ尯鍒嗛厤鐨勬暟鎹殑綰ょ▼瀹夊叏
/GX 鍚敤鍚屾寮傚父澶勭悊
/Gy 鍚敤鍑芥暟綰ч摼鎺?/td>
/Gz 浣跨敤 __stdcall 璋冪敤綰﹀畾
/MD 浣跨敤 MSVCRT.lib 鍒涘緩澶氱嚎紼?DLL
/MDd 浣跨敤 MSVCRTD.lib 鍒涘緩璋冭瘯澶氱嚎紼?DLL
/ML 浣跨敤 LIBC.lib 鍒涘緩鍗曠嚎紼嬪彲鎵ц鏂囦歡
/MLd 浣跨敤 LIBCD.lib 鍒涘緩璋冭瘯鍗曠嚎紼嬪彲鎵ц鏂囦歡
/MT 浣跨敤 LIBCMT.lib 鍒涘緩澶氱嚎紼嬪彲鎵ц鏂囦歡
/MTd 浣跨敤 LIBCMTD.lib 鍒涘緩璋冭瘯澶氱嚎紼嬪彲鎵ц鏂囦歡

杈撳嚭鏂囦歡

/FA
/Fa
鍒涘緩鍒楄〃鏂囦歡
璁劇疆鍒楄〃鏂囦歡鍚?/td>
/Fd 閲嶅懡鍚嶇▼搴忔暟鎹簱鏂囦歡
/Fe 閲嶅懡鍚嶅彲鎵ц鏂囦歡
/Fm 鍒涘緩鏄犲皠鏂囦歡
/Fo 鍒涘緩瀵硅薄鏂囦歡
/Fp 鎸囧畾棰勭紪璇戝ご鏂囦歡鍚?/td>
/FR
/FR
鐢熸垚嫻忚鍣ㄦ枃浠?/td>
/Fx 灝嗘彃鍏ョ殑浠g爜涓庢簮鏂囦歡鍚堝茍

璋冭瘯

/GS 緙撳啿鍖哄畨鍏ㄦ鏌?/td>
/GZ 涓?/RTC1 鐩稿悓
/RTC 鍚敤榪愯鏃墮敊璇鏌?/td>
/Wp64 媯嫻?64 浣嶅彲縐繪鎬ч棶棰?/td>
/Yd 灝嗗畬鏁寸殑璋冭瘯淇℃伅鏀懼湪鎵鏈夊璞℃枃浠朵腑
/Yl 鍒涘緩璋冭瘯搴撴椂鎻掑叆 PCH 寮曠敤
/Z7 鐢熸垚涓?C 7.0 鍏煎鐨勮皟璇曚俊鎭?/td>
/Zd 鐢熸垚琛屽彿
/Zi 鐢熸垚瀹屾暣鐨勮皟璇曚俊鎭?/td>

棰勫鐞嗗櫒

/AI 鎸囧畾鍦ㄨВ鏋愪紶閫掑埌 #using 鎸囦護鐨勬枃浠跺紩鐢ㄦ椂鎼滅儲鐨勭洰褰?/td>
/C 鍦ㄩ澶勭悊鏈熼棿淇濈暀娉ㄩ噴
/D 瀹氫箟甯告暟鍜屽畯
/E 灝嗛澶勭悊鍣ㄨ緭鍑哄鍒跺埌鏍囧噯杈撳嚭
/EP 灝嗛澶勭悊鍣ㄨ緭鍑哄鍒跺埌鏍囧噯杈撳嚭
/Fl 棰勫鐞嗘寚瀹氱殑鍖呭惈鏂囦歡
/FU 寮哄埗浣跨敤鏂囦歡鍚嶏紝灝卞儚瀹冨凡琚紶閫掑埌 #using 鎸囦護涓鏍?/td>
/I 鍦ㄧ洰褰曚腑鎼滅儲鍖呭惈鏂囦歡
/P 灝嗛澶勭悊鍣ㄨ緭鍑哄啓鍏ユ枃浠?/td>
/U 縐婚櫎棰勫畾涔夊畯
/u 縐婚櫎鎵鏈夌殑棰勫畾涔夊畯
/X 蹇界暐鏍囧噯鍖呭惈鐩綍
/ZI 灝嗚皟璇曚俊鎭寘鍚湪涓庘滅紪杈戝茍緇х畫鈥濆吋瀹圭殑紼嬪簭鏁版嵁搴撲腑

璇█

/vd 鍙栨秷鎴栧惎鐢ㄩ殣钘忕殑 vtordisp 綾繪垚鍛?/td>
/vmb 瀵規寚鍚戞垚鍛樼殑鎸囬拡浣跨敤鏈浣崇殑鍩?/td>
/vmg 瀵規寚鍚戞垚鍛樼殑鎸囬拡浣跨敤瀹屽叏涓鑸?/td>
/vmm 澹版槑澶氶噸緇ф壙
/vms 澹版槑鍗曚竴緇ф壙
/vmv 澹版槑铏氭嫙緇ф壙
/Za 紱佺敤璇█鎵╁睍
/Zc 鍦?/Ze 涓嬫寚瀹氭爣鍑嗚涓?/td>
/Ze 鍚敤璇█鎵╁睍
/Zg 鐢熸垚鍑芥暟鍘熷瀷
/Zl 浠?.obj 鏂囦歡涓Щ闄ら粯璁ゅ簱鍚?/td>
/Zp n 灝佽緇撴瀯鎴愬憳
/Zs 鍙鏌ヨ娉?/td>

閾炬帴

/F 璁劇疆鍫嗘爤澶у皬
/LD 鍒涘緩鍔ㄦ侀摼鎺ュ簱
/LDd 鍒涘緩璋冭瘯鍔ㄦ侀摼鎺ュ簱
/link 灝嗘寚瀹氱殑閫夐」浼犻掔粰 LINK
/MD 浣跨敤 MSVCRT.lib 緙栬瘧浠ュ垱寤哄綰跨▼ DLL
/MDd 浣跨敤 MSVCRTD.lib 緙栬瘧浠ュ垱寤鴻皟璇曞綰跨▼ DLL
/ML 浣跨敤 LIBC.lib 緙栬瘧浠ュ垱寤哄崟綰跨▼鍙墽琛屾枃浠?/td>
/MLd 浣跨敤 LIBCD.lib 緙栬瘧浠ュ垱寤鴻皟璇曞崟綰跨▼鍙墽琛屾枃浠?/td>
/MT 浣跨敤 LIBCMT.lib 緙栬瘧浠ュ垱寤哄綰跨▼鍙墽琛屾枃浠?/td>
/MTd 浣跨敤 LIBCMTD.lib 緙栬瘧浠ュ垱寤鴻皟璇曞綰跨▼鍙墽琛屾枃浠?/td>

棰勭紪璇戝ご

/Y- 蹇界暐褰撳墠鐢熸垚涓殑鎵鏈夊叾浠栭緙栬瘧澶寸紪璇戝櫒閫夐」
/Yc 鍒涘緩棰勭紪璇戝ご鏂囦歡
/Yd 灝嗗畬鏁寸殑璋冭瘯淇℃伅鏀懼湪鎵鏈夊璞℃枃浠朵腑
/Yu 鍦ㄧ敓鎴愭湡闂翠嬌鐢ㄩ緙栬瘧澶存枃浠?/td>
/YX 鑷姩澶勭悊棰勭紪璇戝ご

鏉傞」

@ 鎸囧畾鍝嶅簲鏂囦歡
/? 鍒楀嚭緙栬瘧鍣ㄩ夐」
/c 緙栬瘧浣嗕笉閾炬帴
/H 闄愬埗澶栭儴錛堝叕鍏憋級鍚嶇О鐨勯暱搴?/td>
/HELP 鍒楀嚭緙栬瘧鍣ㄩ夐」
/J 鏇存敼榛樿鐨?char 綾誨瀷
/nologo 鍙栨秷鏄劇ず鐧誨綍鐗堟潈鏍囧織
/QI0f 紜繚 Pentium 0F 鎸囦護娌℃湁闂
/QIfdiv FDIV銆丗PREM銆丗PTAN 鍜?FPATAN 鎸囦護鏈夌己闄風殑 Intel Pentium 寰鐞嗗櫒鐨勫彉閫氭柟娉?/td>
QIfist 褰撻渶瑕佷粠嫻偣綾誨瀷杞崲涓烘暣鍨嬫椂鍙栨秷 Helper 鍑芥暟 _ftol 鐨勮皟鐢?/td>
/showIncludes 鍦ㄧ紪璇戞湡闂存樉紺烘墍鏈夊寘鍚枃浠剁殑鍒楄〃
/Tc
/TC
鎸囧畾 C 婧愭枃浠?/td>
/Tp
/TP
鎸囧畾 C++ 婧愭枃浠?/td>
/V 璁劇疆鐗堟湰瀛楃涓?/td>
/W 璁劇疆璀﹀憡絳夌駭
/w 紱佺敤鎵鏈夎鍛?/td>
/Wall 鍚敤鎵鏈夎鍛婏紝鍖呮嫭榛樿鎯呭喌涓嬬鐢ㄧ殑璀﹀憡
/WL 鍦ㄤ粠鍛戒護琛岀紪璇?C++ 婧愪唬鐮佹椂鍚敤閿欒淇℃伅鍜岃鍛婃秷鎭殑鍗曡璇婃柇
/Zm 鎸囧畾棰勭紪璇戝ご鍐呭瓨鍒嗛厤闄愬埗

璇峰弬瑙?/h4>

C/C++ 鐢熸垚鍙傝?/a> | 緙栬瘧鍣ㄩ夐」 | 璁劇疆緙栬瘧鍣ㄩ夐」



]]>璋冭瘯breakpoint楂樼駭http://www.shnenglu.com/mzty/archive/2006/08/16/11289.html姊﹀湪澶╂動姊﹀湪澶╂動Wed, 16 Aug 2006 06:47:00 GMThttp://www.shnenglu.com/mzty/archive/2006/08/16/11289.htmlhttp://www.shnenglu.com/mzty/comments/11289.htmlhttp://www.shnenglu.com/mzty/archive/2006/08/16/11289.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/11289.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/11289.htmlo_tiaoshi2.jpg

Tracepoints

When you have a "mystery" bug to solve, tracepoints are a vital part of your debugging arsenal. Single stepping and looking through code can be S-L-O-O-O-O-W and if you don't even know what you're looking for, it can consume hours and hours of effort. Tracepoints really speed things up. They're like breakpoints that don't break. In a way, they go back to the old "printf debugging" -- but you don't need to make code changes and recompile to change them.

To set a tracepoint, first set a breakpoint, then right-click on the red dot that appears in the margin and choose When Hit:

In the dialog that appears, click the Print A Message box and edit the starter message you are given. You can include any expression in braces and it will be evaluated when control reaches the tracepoint:

Leave the Continue Execution box checked so that you don't break. Tracepoints are identified by red diamonds instead of red dots:

The output from the tracepoints appears in the output window of your debug session:

You can set up something suspicious, let it run, then pore through the tracepoint output and see what you learn. It's a huge timesaver when you're tackling a "we don't even know where to start" bug. Plus, if the issue is related to threading or async issues in any way (and you know me, I keep preaching we will all be facing async issues eventually) then you don't have to worry that pausing execution suppresses the collisions. I recently helped a client solve a big hairy this-stuff-fails-for-our-biggest-customer-only bug using tracepoints... and a few other tricks I will cover in upcoming posts.

Conditional breakpoints

Conditional breakpoints were another really important tool in solving a recent "only happens at the big installations" bug in a big and complicated C++ application. We wanted to debug the code with as few rebuilds as possible and we really didn't know how parts of it worked at all. Tracepoints helped us to figure out a lot of it in a short time. We didn't have a decent repro case though, so here's what we did:

  • created a script to add an audit table and some triggers that write to it
  • created a script to remove those triggers and the table
  • created a batch file to run a server in verbose mode, and redirect the output to a text file (remembering DOS commands sure can be helpful...   myapp.exe -verbose >logfile.txt was the magic phrase.)
  • wrote some instructions for the support guy to grab a backup of the database, run the first script, run the batch file, let it run all night, then in the morning grab another backup of the database, run the second script, and stop the batch file.

Now we ran some queries on the morning version of the database to confirm that at least one X was missing a Y that should have been calculated overnight. We even had the Xid. Thanks to the tracepoint work of the previous day we knew where to be suspicious. A little digging in the trigger output told us whether the problem was "didn't get added" or "got added, but then got deleted". The last step was conditional breakpoints. These let us say "only stop here when you're processing the X with this Xid."

This really saves time when you just need to drill into what's happening in the case that is going wrong. You get to it by right clicking the red dot or diamond and choosing Condition.


One more breakpoint tip - hit count

Conditional breakpoints are cool when you know the value of one variable that is associated with trouble: this only blows up when Xid is 1234. They can also be used to reduce the boredom of single stepping. Say you've got some loop that goes around a few hundred times building up some string or array or something. You don't want to keep going round and round and round... it would be nice to jump ahead to halfway through, for example, and see how things are looking. Now if this is a for loop with a handy named variable, say

 

for (int i = 0; i<1000; i++)

 

Then you can use a conditional breakpoint and say "stop when i is 200". Or you could be clever and stop when i % 200 is 0 -- so that's every 200 times. But what if there's no i? What if you're going through a file or a recordset/dataset/resultset and you're going until the end? You don't want to add some fake variable that gets incremented each time through the loop, just so you can set a breakpoint that breaks on certain values of that variable. Instead you want to use the hit count property of the breakpoint. Just right click the red dot and choose Hit Count. There you can set the breakpoint to break whenever it's hit, just the 10th time it's hit, every tenth time (10, 20, 30 etc) or every time after the 10th time Or, of course, whatever number you want instead of 10:

Don't debug the slow way when there are tools to make you so much faster!

Filter   涓嬫鍐嶄粙緇?

o_tiaoshi.jpg


娉ㄦ剰:c#鐨勪篃鍙互鐢ㄧ殑鍟?...



鏉ヨ嚜:http://www.gregcons.com/KateBlog/CategoryView.aspx?category=C%2B%2B



]]>
TestRunnerhttp://www.shnenglu.com/mzty/archive/2006/07/29/10675.html姊﹀湪澶╂動姊﹀湪澶╂動Sat, 29 Jul 2006 05:31:00 GMThttp://www.shnenglu.com/mzty/archive/2006/07/29/10675.htmlhttp://www.shnenglu.com/mzty/comments/10675.htmlhttp://www.shnenglu.com/mzty/archive/2006/07/29/10675.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/10675.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/10675.htmltestrunner

http://www.mailframe.net/Products/TestRunner/default.aspx

TestRunner Provides

  • Test Driven Development inside Visual Studio 2005
  • Integrated debugging from a simple context menu in the editor
  • File, method, and line level code coverage in the editor
  • Graphical test feedback directly in the Visual Studio editor
  • Console & Trace redirection to the Output Window
  • Non-blocking test runs -- program while you test on a background thread
  • Test failure tool tips and line markers
  • Ultra Performance tested with suites of 1400 unit tests

  • TestRunner will change the way you NUnit test by making it a seamless experience with programming. Tests run in the background and richly interact with the Visual Studio editor instead of a separate program, saving you from the window shuffle or losing your place in your code. Unit testing, code coverage, and now performance profiling all in one convenient tool.

cppunit:聽聽 http://morningspace.51.net/resource/cppunit/textui.html

------------------------------------------------------------------------------------------------------------------------------------

TestDriven.NET緗戝潃錛?a >http://www.testdriven.net/
涓嬭澆鍦板潃錛?a >http://www.testdriven.net/Default.aspx?tabid=27
鍗氬鍥笅杞藉湴鍧錛?a >http://downloads.cnblogs.com/TestDriven.NET-1.0.915d.zip
浣跨敤甯姪錛?a >http://www.testdriven.net/Default.aspx?tabid=29

浣跨敤鎰熷彈錛?
1銆佷笌VS.NET闆嗘垚寰楀緢涓嶉敊, 浣跨敤璧鋒潵寰堟柟渚? 姣斿鎴戜滑榪愯涓涓祴璇曟柟娉曪紝鐩存帴鍦ㄨ繖涓柟娉曚笂鐐瑰嚮鍙抽敭Run Test(s):

鐒跺悗鍦╒S.NET鐨勮緭鍑虹獥鍙d腑杈撳嚭嫻嬭瘯緇撴灉銆侰ool! 閿欒淇℃伅浼氭樉紺哄湪浠誨姟紿楀彛銆?
2銆佸湪鈥滆В鍐蟲柟妗堣祫婧愮鐞嗗櫒鈥濅腑錛屽彲浠ラ変腑鐩稿簲鐨勯」鐩偣鍑誨彸閿繍琛屾祴璇曪紝鍙互閫氳繃Test With NUnit GUI鍚姩NUnit GUI榪愯嫻嬭瘯銆?
3銆侀氳繃Tests With Debugger, 鍦―ebug妯″紡涓繍琛屾祴璇曪紝
4銆佷笉闇瑕佸彟澶栧畨瑁匩Unit銆俆estDriven.NET宸茬粡鑷甫NUnit銆?br />
------------------------------------------------------------------

nunit鐨勪嬌鐢?

http://ltp.cnblogs.com/archive/2005/12/03/289720.html


姊﹀湪澶╂動 2006-07-29 13:31 鍙戣〃璇勮
]]>
鍗囩駭VC7欏圭洰鍒癡C8鐨勬敞鎰忎簨欏?杞?http://www.shnenglu.com/mzty/archive/2006/07/24/10386.html姊﹀湪澶╂動姊﹀湪澶╂動Mon, 24 Jul 2006 00:47:00 GMThttp://www.shnenglu.com/mzty/archive/2006/07/24/10386.htmlhttp://www.shnenglu.com/mzty/comments/10386.htmlhttp://www.shnenglu.com/mzty/archive/2006/07/24/10386.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/10386.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/10386.html闃呰鍏ㄦ枃

姊﹀湪澶╂動 2006-07-24 08:47 鍙戣〃璇勮
]]>
浣跨敤API瀹炵幇1/1000縐掔殑鎬ц兘嫻嬭瘯綾?/title><link>http://www.shnenglu.com/mzty/archive/2006/06/16/8636.html</link><dc:creator>姊﹀湪澶╂動</dc:creator><author>姊﹀湪澶╂動</author><pubDate>Fri, 16 Jun 2006 06:07:00 GMT</pubDate><guid>http://www.shnenglu.com/mzty/archive/2006/06/16/8636.html</guid><wfw:comment>http://www.shnenglu.com/mzty/comments/8636.html</wfw:comment><comments>http://www.shnenglu.com/mzty/archive/2006/06/16/8636.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/mzty/comments/commentRss/8636.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mzty/services/trackbacks/8636.html</trackback:ping><description><![CDATA[     鎽樿: // 聽MbUnit聽Test聽Framework // 聽 // 聽Copyright聽(c)聽2004聽Jonathan聽de聽Halleux // // 聽This聽software聽is聽provided聽'as-is',聽without聽any聽expr...  <a href='http://www.shnenglu.com/mzty/archive/2006/06/16/8636.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/mzty/aggbug/8636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mzty/" target="_blank">姊﹀湪澶╂動</a> 2006-06-16 14:07 <a href="http://www.shnenglu.com/mzty/archive/2006/06/16/8636.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Visual Studio 2005 Team System錛氭瀯寤哄仴澹屽彲闈犵殑杞歡http://www.shnenglu.com/mzty/archive/2006/06/16/8630.html姊﹀湪澶╂動姊﹀湪澶╂動Fri, 16 Jun 2006 04:16:00 GMThttp://www.shnenglu.com/mzty/archive/2006/06/16/8630.htmlhttp://www.shnenglu.com/mzty/comments/8630.htmlhttp://www.shnenglu.com/mzty/archive/2006/06/16/8630.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/8630.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/8630.htmlVisual Studio 2005 Team System錛氭瀯寤哄仴澹屽彲闈犵殑杞歡

鍙戝竷鏃ユ湡錛?6/21/2005 | 鏇存柊鏃ユ湡錛?6/21/2005

Kamran Iqbal
Microsoft Corporation

閫傜敤浜庯細

Microsoft Visual Studio廬 2005 Team System

鎽樿錛?/b>鎻忚堪 Visual Studio 2005 Team System 鎻愪緵鐨勪唬鐮佸垎鏋愬拰鎬ц兘宸ュ叿銆?/p>

娉?/b> 鏈枃妗d簬浜у搧鎶曞叆鐢熶駭涔嬪墠緙栧啓錛屽洜姝ゆ偍鍙兘浼氬彂鐜拌繖閲屾墍鍖呭惈鐨勭粏鑺備笌鍙戝竷鐨勪駭鍝佹湁涓嶄竴鑷寸殑鍦版柟銆傛枃涓殑淇℃伅鍧囦緷鎹挵鍐欐湰鏂囨椂鐨勪駭鍝佺姸鍐碉紝浠呬緵鎮ㄥ湪瑙勫垝鏃跺弬鑰冦傚鏈夋洿鏀癸紝鎭曚笉鍙﹁閫氱煡銆侻icrosoft 鎷ユ湁鏈枃妗d腑鐨勪富棰樻墍娑夊強鐨勪笓鍒┿佷笓鍒╁簲鐢ㄧ▼搴忋佸晢鏍囥佺増鏉冩垨鍏朵粬鐨勭煡璇嗕駭鏉冦傞櫎闈?Microsoft 浠ヤ換浣曚功闈㈣鍙崗璁槑紜彁渚涳紝鍚戞偍鎻愪緵鏈枃妗e茍娌$粰浜堟偍浣跨敤榪欎簺涓撳埄銆佸晢鏍囥佺増鏉冩垨鍏朵粬鐭ヨ瘑浜ф潈鐨勪換浣曡鍙瘉銆?/p>

*
鏈〉鍐呭
綆浠? hspace= 綆浠?/a>
鍒嗘瀽宸ュ叿鏀寔 鍒嗘瀽宸ュ叿鏀寔
鎴戜滑鐨勮В鍐蟲柟妗? hspace= 鎴戜滑鐨勮В鍐蟲柟妗?/a>
Visual Studio 涓殑宸ュ叿闆嗘垚 Visual Studio 涓殑宸ュ叿闆嗘垚
灝忕粨 灝忕粨

綆浠?/h2>

瑕佸紑鍙戝仴澹屽彲闈犵殑杞歡錛屽紑鍙戜漢鍛橀渶瑕佷竴濂楅泦鎴愬垎鏋愬伐鍏鳳紝鏉ュ府鍔╀粬浠湪寮鍙戠殑鏃╂湡媯嫻嬩唬鐮佺己闄峰拰鎬ц兘闂銆?/p>

鍒嗘瀽宸ュ叿鏀寔

榪囧幓錛岀敱浜?Visual Studio 涓己灝戝浠g爜鍒嗘瀽鐨勬敮鎸侊紝鍥犳寮鍙戜漢鍛樹笉寰椾笉璐拱絎笁鏂瑰伐鍏鳳紝鏋勫緩鑷畾涔夊垎鏋愬伐鍏鳳紝鎴栬呭彂甯冩湭緇忓垎鏋愮殑浠g爜銆?

鈥?/td>

鑺辮垂棰濆鐨勬垚鏈喘涔扮涓夋柟宸ュ叿銆?

浠庝紬澶氱殑鍒嗘瀽宸ュ叿涓夋嫨涓涓棦鑳芥弧瓚寵蔣浠跺垎鏋愮殑瑕佹眰鍙堝湪棰勭畻闄愬埗鑼冨洿涔嬪唴鐨勫伐鍏鳳紝鏈繀鎬繪槸涓欏硅交鏉劇殑浠誨姟銆傚彟澶栵紝榪欎簺宸ュ叿鍙兘娌℃湁闆嗘垚鍒?Visual Studio 闆嗘垚寮鍙戠幆澧?(IDE) 涓紝鍥犳閫氬父闇瑕佽姳璐歸澶栫殑鏃墮棿鏉ュ涔犲浣曢『鍒╁湴浣跨敤瀹冧滑銆?

鈥?/td>

鏋勫緩鑷畾涔夊垎鏋愬伐鍏楓?

鏋勫緩鑷畾涔夊垎鏋愬伐鍏烽渶瑕佽祫婧愩佹妧鑳藉拰緇忛獙銆傝繖瀵瑰ぇ澶氭暟鍏徃涓殑寮鍙戝洟闃熻岃█鏄笉鐜板疄鐨勶紝浠呬粎鏄皯鏁板叕鍙稿彲浠ユ媴璐熷緱璧風殑閫夋嫨銆?

鈥?/td>

鍙戝竷鏈粡鍒嗘瀽鐨勪唬鐮併?

鍦ㄥ伐鏃舵湡闄愬拰棰勭畻闄愬埗绱у紶鐨勬儏鍐典笅錛屽彂甯冩湭緇忓垎鏋愮殑浠g爜浼間箮鏄竴縐嶆紜殑鏂規硶錛屼絾濡傛灉杞歡鍦ㄩ儴緗蹭箣鍚庡彂鐢熸晠闅滐紝鍙兘璇佹槑閲囩敤榪欑閿欒鏂規硶鐨勪唬浠蜂笉鑿層?

鎴戜滑鐨勮В鍐蟲柟妗?/h2>

鍦?Visual Studio 2005 Team System 涓紝寮鍙戜漢鍛樺皢浼氱湅鍒頒竴濂楀叏鏂扮殑銆佸畬鍏ㄩ泦鎴愬埌 IDE 涓殑鍒嗘瀽宸ュ叿銆傝繖縐嶅垎鏋愬伐鍏蜂笌寮鍙戠幆澧冪殑绱у瘑闆嗘垚錛屽彲浠ュ府鍔╁紑鍙戜漢鍛樺湪浜у搧寮鍙戠殑鏃╂湡媯嫻嬪茍淇浠g爜緙洪櫡鍜屾ц兘闂銆傝繖榪樺彲浠ュ府鍔╁洟闃熸湁鏁堜笖楂樻晥鍦扮鐞嗚蔣浠跺紑鍙戠敓鍛藉懆鏈燂紙Software Development Life Cycle錛孲DLC錛夈?/p>

鍦?Visual Studio 2005 Team System 涓紝鏈変袱綾誨垎鏋愬伐鍏峰彲鐢ㄤ簬鏋勫緩鍋ュ.鑰屽彲闈犵殑杞歡錛?

鈥?/td>

浠g爜鍒嗘瀽宸ュ叿

鈥?/td>

鎬ц兘宸ュ叿

鍦ㄥ紑鍙戠幆澧冧腑闆嗘垚鍒嗘瀽宸ュ叿鍙互甯姪寮鍙戜漢鍛樻嫻嬩笌緙栫爜銆佹ц兘鍙婂畨鍏ㄦх浉鍏崇殑闂銆傛澶栵紝鍙皢浠g爜鍒嗘瀽宸ュ叿浣滀負絳懼叆絳栫暐鐨勪竴閮ㄥ垎鐢ㄤ簬姣忔棩鏋勫緩 (nightly build) 榪囩▼錛屼嬌寮鍙戝洟闃熻兘澶熷湪灝嗕唬鐮佺鍏ュ埌婧愭爲 (source tree) 涔嬪墠淇緙洪櫡銆傞氳繃鍦ㄥ紑鍙戠殑鏃╂湡錛堣屼笉鏄悗鏈燂級鏇存闂錛屽洟闃熷彲闄嶄綆淇浠g爜緙洪櫡鐨勬諱綋鎴愭湰銆?/p>

闄や簡瀹屽叏闆嗘垚鍒?IDE 涓箣澶栵紝寮鍙戜漢鍛樿繕鍙互浠庡懡浠よ浣跨敤榪欎簺宸ュ叿銆?/p>

Visual Studio 涓殑宸ュ叿闆嗘垚

鍦?Visual Studio 2005 Team System 涓紝閫氳繃浣跨敤浠g爜鍒嗘瀽宸ュ叿鍜屾ц兘宸ュ叿錛屽紑鍙戜漢鍛樺彲浠ュ浠g爜榪涜闈欐佸拰鍔ㄦ佸垎鏋愩?/p>

浠g爜鍒嗘瀽宸ュ叿

浠g爜鍒嗘瀽宸ュ叿鐨勭洰鏍囨槸浣垮紑鍙戜漢鍛樿兘澶熷鍏墮」鐩繘琛岄潤鎬佸垎鏋愶紝浠ユ嫻嬪拰淇浠g爜緙洪櫡銆備負浜嗗疄鐜拌繖涓洰鏍囷紝Visual Studio 2005 Team System 涓寘鍚簡涓や釜宸ュ叿錛?

鈥?/td>

PREfast

鈥?/td>

FxCop

PREfast

PREfast 鏄竴涓潤鎬佸垎鏋愬伐鍏鳳紝瀹冧負寮鍙戜漢鍛樻彁渚涙湁鍏沖叾 C/C++ 婧愪唬鐮佷腑鍙兘瀛樺湪緙洪櫡鐨勪俊鎭侾REfast 鎶ュ憡鐨勫父瑙佷唬鐮侀敊璇寘鎷紦鍐插尯婧㈠嚭銆佹湭鍒濆鍖栧唴瀛樸佺┖鎸囬拡鍙栨秷寮曠敤銆佸唴瀛樻硠婕忓拰璧勬簮鐭己銆?/p>

IDE 闆嗘垚

涓轟簡浣垮紑鍙戜漢鍛樿兘澶熻嚜鐒跺湴浣跨敤鍒嗘瀽宸ュ叿錛屽彲浠ュ皢 PREfast 瀹屽叏闆嗘垚鍒?IDE 涓傞氳繃鍦ㄩ」鐩殑 Property Pages 涓婇夋嫨 Yes (/prefast)錛屽紑鍙戜漢鍛樺彲浠ヨ交鏉懼惎鐢?PREfast錛屽鍥?1 鎵紺恒?/p>


鍥?/b> 1. 鍚敤 PRE f ast

鍦ㄧ敓鎴愯繃紼嬩腑錛屼負婧愪唬鐮佺敓鎴愮殑浠諱綍 PREfast 璀﹀憡閮藉嚭鐜板湪 Error List 涓傝繖浜涜鍛婂寘鎷己闄瘋礬寰勪俊鎭紙濡傛灉鏈夛級錛涘弻鍑葷獊鍑烘樉紺虹己闄瘋礬寰勭殑璀﹀憡錛屽彲浠ヨ繘鍏ヤ唬鐮佺紪杈戝櫒涓殑璀﹀憡錛屽鍥?2 鎵紺恒?/p>


鍥?/b> 2. PRE f ast 璀﹀憡

#pragma support

Developers can use the #pragma directive to treat warnings as errors, or disable warnings, as shown below.
#pragma warning (error: 6260)  //treat warning 6260 as an error
#pragma warning (disable: 6011)  //disable warning 6011

鎵規敞鏀寔

PREfast 榪樻敮鎸佹壒娉ㄤ互鏀瑰杽浠g爜鍒嗘瀽鐨勭簿紜с傛壒娉ㄦ彁渚涙湁鍏沖嚱鏁板弬鏁板拰榪斿洖綾誨瀷鐨勪箣鍓嶅拰涔嬪悗鏉′歡鐨勯檮鍔犱俊鎭?/p>

#include 
[SA_Post( MustCheck=SA_Yes )] double* CalcSquareRoot
( 
   [SA_Pre( Null=SA_No )] double* source, 
   unsigned int size
)

鍦ㄤ笂闈㈢殑紺轟緥涓細

鈥?/td>

[SA_Post ( MustCheck=SA_Yes)] 瑕佹眰璋冪敤鏂規鏌?CalcSquareRoot 鐨勮繑鍥炲?

鈥?/td>

[SA_Pre ( Null=SA_No)] 瑕佹眰璋冪敤鏂瑰皢闈炵┖鍙傛暟鈥渟ource鈥濅紶閫掔粰 CalcSquareRoot

鍛戒護琛屾敮鎸?/em>

闄や簡涓庡紑鍙戠幆澧冨畬鍏ㄩ泦鎴愪箣澶栵紝寮鍙戜漢鍛樿繕鍙互浠庡懡浠よ浣跨敤 PREfast錛屽涓嬫墍紺恒?/p>

C:\>cl /prefast Sample.cpp

FxCop

FxCop 鏄竴涓潤鎬佸垎鏋愬伐鍏鳳紝瀹冨垎鏋愭墭綆′唬鐮佺▼搴忛泦騫舵姤鍛婃湁鍏崇▼搴忛泦鐨勪俊鎭紝渚嬪錛屼笌 Microsoft .NET Framework Design Guidelines 涓槓榪扮殑緙栫▼鍜岃璁¤鍒欑浉鍐茬獊銆侳xCop 琛ㄧず鍦ㄥ垎鏋愯繃紼嬩腑浣滀負瑙勫垯鎵ц鐨勬鏌ャ傝鍒欐槸涓孌墊墭綆′唬鐮侊紝璇ヤ唬鐮佸垎鏋愮▼搴忛泦騫惰繑鍥炴湁鍏沖畠鍙戠幇緇撴灉鐨勬秷鎭傝鍒欐秷鎭瘑鍒換浣曠浉鍏崇殑緙栫▼鍜岃璁¢棶棰橈紝騫跺湪鍙兘鐨勬儏鍐典笅錛屾彁渚涙湁鍏沖浣曚慨澶嶇洰鏍囩殑淇℃伅銆?/p>

IDE 闆嗘垚

涓轟簡浣垮紑鍙戜漢鍛樿兘澶熻嚜鐒跺湴浣跨敤鍒嗘瀽宸ュ叿錛屽紑鍙戜漢鍛樺彲浠ュ湪欏圭洰鐨?Property Pages 涓婇夋嫨 Run FxCop錛屽鍥?3 鎵紺恒?/p>


鍥?/b> 3. 鍚敤 FxCop

鏈夊叧鍖呭惈鎴栨帓闄よ鍒欙紝灝嗚鍒欎綔涓鴻鍛婃垨閿欒鐨勯檮鍔犻夐」錛屼篃鍙互鍦?Property Pages 涓壘鍒幫紝濡傚浘 4 鎵紺恒?/p>


鍥?/b> 4. FxCop 瑙勫垯

涓鏃﹀惎鐢?FxCop錛屽湪鐢熸垚榪囩▼涓紝FxCop 灝變細鍦?Error List 涓姤鍛婂啿紿侊紝濡傚浘 5 鎵紺恒?/p>


鍥?/b> 5. FxCop 瑙勫垯鍐茬獊

Error List 鎻愪緵鏈夊叧瑙勫垯鍐茬獊鐨勪俊鎭拰寤鴻錛屼互渚夸簬鎮ㄧ籂姝i敊璇傚彧闇鍦?Error List 涓弻鍑昏鍒欏啿紿侊紝鍗沖彲杞繪澗鍦板畾浣嶅埌瑙︾姱浜嗚鍒欑殑浠g爜琛屻?/p>

MSBuild 闆嗘垚

Visual Studio 鐨勪笅涓涓増鏈粠鏍規湰涓婃敼榪涗簡鐢熸垚榪囩▼錛屽叾鏂規硶鏄紩鍏ヤ竴涓柊鐨勩佸悕涓?MSBuild 鐨勭敓鎴愬紩鎿庛傚彲浠ラ氳繃 MSBuild 緋葷粺璋冪敤 FxCop銆傝繖浣垮紑鍙戜漢鍛樿兘澶熶粠鍛戒護琛岃繍琛屾墭綆¢」鐩笂鐨?FxCop銆?/p>

鎬ц兘宸ュ叿

鍦?Visual Studio 2005 Team System 涓紝寮鍙戜漢鍛樺彲浠ラ氳繃鎬ц兘宸ュ叿鏉ュ害閲忋佽綆楀拰瀹氫綅浠g爜涓笌鎬ц兘鐩稿叧鐨勯棶棰樸傝繖浜涘伐鍏烽兘瀹屽叏闆嗘垚鍒?IDE 涓紝浠ユ彁渚涙棤緙濄佸弸濂界殑鐢ㄦ埛浣撻獙銆?/p>

鎬ц兘宸ュ叿鏀寔涓ょ鍒嗘瀽鏂規硶錛?

鈥?/td>

閲囨牱

鈥?/td>

浣跨敤浠櫒

鍦ㄩ噰鏍風殑榪囩▼涓紝鏁版嵁鏀墮泦鍩虹緇撴瀯灝嗗畾鏈熶腑鏂鍦ㄦ墽琛岀殑搴旂敤紼嬪簭錛屼互紜畾姝e湪鎵ц鐨勬槸鍝釜鍑芥暟錛屽茍澧炲姞鍑芥暟鐨勯噰鏍瘋鏁般傚畠瀛樺偍鏈夊叧鍑嗗鍑芥暟璋冪敤鐨勮皟鐢ㄥ爢鏍堢殑淇℃伅銆?/p>

搴旂敤紼嬪簭閫鍑哄悗錛屾敹闆嗗埌鐨勬墍鏈夋暟鎹細鐢熸垚涓轟竴涓姤鍛婃枃浠訛紝鎮ㄥ彲浠ヤ嬌鐢?IDE 涓泦鎴愮殑鎶ュ憡鍔熻兘杞繪澗鍦版煡鐪嬭鏂囦歡銆?/p>

閲囨牱鐨勪紭鍔垮湪浜庝綆寮閿錛屽洜涓鴻繖鍙槸瀹氭湡涓柇搴旂敤紼嬪簭銆傝繖浣垮緱搴旂敤紼嬪簭鐨勮涓鴻兘澶熸洿鎺ヨ繎瀹為檯鎯呭喌銆傝繖縐嶆柟娉曠殑緙虹偣鏄紝瀹冨彧鑳借幏鍙栧凡閲囨牱鍑芥暟鐨勭浉鍏蟲ц兘鏁版嵁銆傛湁鍙兘娌℃湁瀵歸渶瑕侀噰鏍風殑鍑芥暟榪涜閲囨牱錛屽洜鑰屾棤娉曡幏鍙栨湁鍏寵鍑芥暟鐨勪俊鎭?

浣跨敤浠櫒鐨勪紭鍔垮湪浜庡彲浠ユ敹闆嗗簲鐢ㄧ▼搴忕殑鐗瑰畾閮ㄥ垎鐨勭簿紜ц兘鏁版嵁銆傚湪浣跨敤浠櫒鐨勮繃紼嬩腑錛屸渆nter鈥濆拰鈥渆xit鈥濇帰閽堣鎻掑叆鍒板簲鐢ㄧ▼搴忕殑鍑芥暟涓傝繖浜涙帰閽堝皢鎶ュ憡榪斿洖緇欐暟鎹敹闆嗗熀紜緇撴瀯錛屽茍鍏佽鐢ㄦ埛鎹曡幏鍑芥暟鎵ц鎵闇鐨勭簿紜椂闂達紙鎴栧叾浠栬 閲忔爣鍑嗭級銆?/p>

鍒嗘瀽搴旂敤紼嬪簭

鍒嗘瀽搴旂敤紼嬪簭鐨勯閫変嬌鐢ㄦā寮忔槸棣栧厛寮濮嬮噰鏍鳳紝鐒跺悗鏍規嵁閲囨牱鎵浜х敓鐨勭粨鏋滄嫻嬪簲鐢ㄧ▼搴忕殑鐗瑰畾鏂歸潰銆?/p>

鍒嗘瀽搴旂敤紼嬪簭鐨勮繃紼嬬浉褰撶畝鍗曘傞鍏堝垱寤轟竴涓柊鐨勬ц兘浼氳瘽銆傚湪 Visual Studio 2005 Team System 涓紝鍙互浣跨敤 Performance Session Wizard 鍒涘緩涓涓柊鐨勬ц兘浼氳瘽銆?/p>

Performance Session Wizard

Performance Session Wizard 璁劇疆鍒嗘瀽搴旂敤紼嬪簭鐨勫繀瑕佺幆澧冦傚湪 Visual Studio 2005 Team System 涓紝璇ュ悜瀵間負 EXE銆丏LL 鍜?ASP.NET 搴旂敤紼嬪簭鎻愪緵鍐呯疆鏀寔銆?/p>

鍙互浣跨敤璇ュ悜瀵煎垱寤轟竴涓?New Performance Session錛屽鍥?6 鎵紺恒?/p>


鍥?/b> 6. 鍚姩鎬ц兘鍚戝

娉?/b> 瑕佹墜鍔ㄥ垱寤轟竴涓柊鐨勬ц兘浼氳瘽錛岃浣跨敤鑿滃崟涓婄殑 New Performance Session 鍛戒護銆傚彲浠ラ噰鐢ㄨ繖縐嶆柟娉曟潵鎵嬪姩鍒嗘瀽鍏朵粬綾誨瀷鐨勫簲鐢ㄧ▼搴忥紙渚嬪錛學indows 鏈嶅姟錛夈?/p>

Performance Explorer

鎬ц兘浼氳瘽浣滀負榪愯浼氳瘽鍚戝鎴栨墜鍔ㄥ垱寤轟細璇濈殑緇撴灉鑰屽垱寤恒?b>Performance Explorer 鍙互灝嗗叾鐩磋鍦拌〃紺哄嚭鏉ワ紝濡傚浘 7 鎵紺恒?/p>


鍥?/b> 7. 鎬ц兘璧勬簮綆$悊鍣?/b>

Performance Explorer 緇欑敤鎴峰憟鐜頒簡灞傛緇撴瀯銆傝灞傛緇撴瀯鐨勬牴鑺傜偣琛ㄧず Performance Session銆傝繖縐嶈妭鐐圭殑灞炴ф槸鐢ㄦ埛鍦ㄥ垱寤?Performance Session 鏃惰緗殑灞炴с傚鏋滅敤鎴蜂嬌鐢?Performance Session Wizard 鍒涘緩浼氳瘽錛屽垯榪欎簺灞炴т綋鐜頒簡鐢ㄦ埛鍦ㄤ嬌鐢ㄥ悜瀵肩殑榪囩▼涓墍閫夋嫨鐨勫箋傚鏋滅敤鎴鋒墜鍔ㄥ垱寤?Performance Session錛屽垯榪欎簺灞炴у寘鍚簡瀹冧滑鐨勯粯璁ゅ箋?/p>

鏍硅妭鐐規湁涓や釜瀛愯妭鐐癸細Targets 鑺傜偣鍜?Reports 鑺傜偣銆?b>Targets 鑺傜偣鍖呭惈涓涓垨澶氫釜鐩爣錛岀洰鏍囧彲浠ユ槸 EXE銆丏LL 鎴?ASP.NET 搴旂敤紼嬪簭銆?/p>

Reports 鑺傜偣鍖呭惈涓庢煇涓壒瀹?Performance Session 鐩稿叧鐨勬墍鏈夋姤鍛娿?/p>

鎬ц兘浼氳瘽鎶ュ憡

涓鏃﹀簲鐢ㄧ▼搴忔墽琛屽畬姣曪紝緋葷粺灝變細灝嗕竴涓ц兘浼氳瘽鎶ュ憡鑷姩娣誨姞鍒?Reports 鑺傜偣銆傚彲浠ラ氳繃涓嬮潰鐨勮鍥炬潵鏌ョ湅榪欎簺鎶ュ憡錛?/p>

Summary 瑙嗗浘

Summary 瑙嗗浘涓哄紑鍙戜漢鍛樻彁渚涗簡鍏惰皟鏌ョ殑璧風偣銆傚畠鏄劇ず搴旂敤紼嬪簭鎵ц榪囩▼涓紑閿鏈楂樼殑鍑芥暟錛屽鍥?8 鎵紺恒備粠璇ヨ鍥句腑鐨勬瘡涓暟鎹偣錛岀敤鎴烽兘鍙互瀹氫綅鍒版洿璇︾粏鐨勮鍥俱?/p>


鍥?/b> 8. Summary 瑙嗗浘

Functions 瑙嗗浘

Functions 瑙嗗浘鏄劇ず鍦ㄥ簲鐢ㄧ▼搴忕殑鎵ц榪囩▼涓皟鐢ㄧ殑鍏ㄩ儴鍑芥暟錛岃繖浜涘嚱鏁板瓨鍦ㄤ簬鐢辮搴旂敤紼嬪簭寮曠敤鐨勬墍鏈夋ā鍧椾箣涓紝濡傚浘 9 鎵紺恒傝瑙嗗浘鏄劇ず鐨勪俊鎭彇鍐充簬鎵鐢ㄧ殑鍒嗘瀽鏂規硶錛堥噰鏍蜂笌浣跨敤浠櫒錛夈?/p>


鍥?9. Functions 瑙嗗浘

Caller/Callee 瑙嗗浘

Caller/Callee 瑙嗗浘鎻愪緵鍦?Functions 瑙嗗浘涓墍鍒楀嚱鏁扮殑璇︾粏淇℃伅錛屽鍥?10 鎵紺恒?/p>


鍥?/b> 10. Caller/Callee 瑙嗗浘

Callstack 瑙嗗浘

Callstack 瑙嗗浘浣跨敤鎴瘋兘澶熷悜涓嬫悳绱㈢壒瀹氱殑璋冪敤璺熻釜錛屽茍鍒嗘瀽鍝簺璺熻釜瀵規ц兘鐨勫獎鍝嶆渶澶с?/p>


鍥?/b> 11. Callstack 瑙嗗浘

Type 瑙嗗浘

Type 瑙嗗浘鎻愪緵鏈夊叧鏌愪釜鐗瑰畾綾誨瀷鐨勫疄渚嬫暟閲忓拰鎬誨瓧鑺傛暟鐨勪俊鎭紝濡傚浘 12 鎵紺恒?/p>

鍛戒護琛屾敮鎸?/em>

鍙互閫氳繃鍛戒護琛屽伐鍏蜂嬌鐢ㄦц兘宸ュ叿鍔熻兘銆傝繖涓虹敤鎴鋒彁渚涗簡鐏墊椿鎬э紝鐢ㄦ埛鏃㈠彲浠ヤ粠鍛戒護琛岃繍琛岃繖浜涘伐鍏鳳紝鍙堝彲浠ラ氳繃鑴氭湰鏉ヤ嬌鐢ㄥ畠浠紝浠ヤ究鑷姩鎵ц浠誨姟銆?/p>

]]>
鍗曞厓嫻嬭瘯灝忔妧宸?/title><link>http://www.shnenglu.com/mzty/archive/2006/06/16/8628.html</link><dc:creator>姊﹀湪澶╂動</dc:creator><author>姊﹀湪澶╂動</author><pubDate>Fri, 16 Jun 2006 03:53:00 GMT</pubDate><guid>http://www.shnenglu.com/mzty/archive/2006/06/16/8628.html</guid><wfw:comment>http://www.shnenglu.com/mzty/comments/8628.html</wfw:comment><comments>http://www.shnenglu.com/mzty/archive/2006/06/16/8628.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/mzty/comments/commentRss/8628.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mzty/services/trackbacks/8628.html</trackback:ping><description><![CDATA[ <h1>鍗曞厓嫻嬭瘯灝忔妧宸?/h1> <h2 class="subtitle">緙栧啓鍙淮鎶ょ殑鑺傜渷鏃墮棿鍜岀簿鍔涚殑鍗曞厓嫻嬭瘯</h2> <div id="hvzpftn" class="date">鍙戝竷鏃ユ湡錛?2006-04-17<span id="hvzpftn" class="datePipe"> | </span>鏇存柊鏃ユ湡錛?2006-04-17</div> <div id="hvzpftn" class="overview"> <p>榪欑瘒鏂囩珷鎻忚堪浜嗭細</p> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>鍗曞厓嫻嬭瘯鐨勪俊浠?/p> </td> </tr> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>嫻嬭瘯姝g‘浜嬩歡</p> </td> </tr> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>鍒涘緩緇存姢嫻嬭瘯</p> </td> </tr> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>鍒涘緩鏄撹嫻嬭瘯</p> </td> </tr> </tbody> </table> <p>榪欎簺澶╂湁寰堝鐨勫叧浜庡崟鍏冩祴璇曠殑鍜屽湪涓嶅悓鐨勫満鏅笅涓轟粬浠殑搴旂敤紼嬪簭緙栧啓鍗曞厓嫻嬭瘯(璧峰浜? 鎴戜滑2005騫村叚鏈堢殑 <i>MSDN</i><sup>廬</sup><i>Magazine</i> 涓湁鍏蟲祴璇曚綘鐨勬暟鎹眰鐨勬枃绔? <em>Know Thy Code: Simplify Data Layer Unit Testing using Enterprise Services</em>)鐨勮璁恒傝繖浜涙剰鍛崇潃鏈夊緢澶氱殑寮鍙戣呰嚜璦鑷錛堟垨鑰呭浜庝粬浠殑鍥㈤槦錛夊埌錛氣滃搸錛屾垜浠篃闇瑕佸紑濮嬬紪鍐欐祴璇曚簡錛佲濆洜姝や粬浠紑濮嬬紪鍐欏崟鍏冩祴璇曚笂闈㈢殑鍗曞厓嫻嬭瘯鐩村埌浠栦滑杈懼埌浜嗕竴涓祴璇曡嚜宸卞凡緇忔垚涓洪棶棰樼殑紼嬪害銆傛垨璁哥淮鎶や粬浠槸涓涓お榪囧洶闅撅紝鑺辮垂澶暱鏃墮棿錛屾垨鑰呬粬浠茍娌℃湁瓚沖鐨勬槗璇繪т互渚夸簬鐞嗚В錛屾洿鎴栬呬粬浠湰韜瓨鍦╞ugs鏈変竴鐐規槸鑳藉浣垮緱鎴戜滑鐨勫紑鍙戜漢鍛樺彲浠ヤ笅瀹氬喅蹇冨幓鍋氱殑錛岄偅灝辨槸錛?鑺辮垂浠栦滑瀹濊吹鐨勬椂闂翠互鐢ㄦ潵鏀硅繘鎻愰珮浠栦滑鐨勬祴璇曟垨鑰呭拷鐣ュ叾涓殑闂, 浠庤屾湁鏁堢殑鐢╂帀閭d簺鑹拌嫤鐨勫伐浣溿傝岃繖浜涘洶闅劇殑鍘熷洜浠呬粎鏄洜涓洪偅浜涗笉鐔熺粌鐨勫啓鍏ュ崟鍏冩祴璇曘?鍦ㄨ繖綃囨枃绔犱腑錛屾垜灝嗕負澶у甯︽潵鍦ㄨ繃鍘諱竴騫村鏃墮棿閲屾垜鍦ㄥ紑鍙戯紝鎻愪緵鍜ㄨ鍜屽煿璁紑鍙戣呯瓑鏂歸潰鏈夋葷粨鍑烘潵鐨勪竴浜涙渶閲嶈鐨勭粌涔犲拰璇曢獙銆傝繖浜涘皬鐨勬妧宸у彲浠ュ府鍔╂偍鍐欏嚭鏇存湁鏁堢殑錛屽彲緇存姢錛屽拰椴佹鎬ф洿濂界殑鍗曞厓嫻嬭瘯銆傚悓鏃舵垜甯屾湜榪欎簺鎬葷粨鍜屽繝鍛婂彲浠ュ府鍔╂偍閬垮厤涓浜涚敱浜庨敊璇紩璧風殑澶ч噺鐨勬椂闂寸殑娑堣椼?/p> </div> <center> <img title="" height="6" alt="*" src="http://img.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" width="30" border="0" /> </center> <div style="HEIGHT: 18px"> </div> <h5 style="PADDING-TOP: 2px">鏈〉鍐呭</h5> <table style="MARGIN-TOP: 7px; MARGIN-BOTTOM: 12px" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr valign="top"> <td> <a > <img height="9" alt="鍗曞厓嫻嬭瘯鐨勪俊浠? hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /> </a> </td> <td class="onThisPage"> <a > <font color="#002c99">鍗曞厓嫻嬭瘯鐨勪俊浠?/font> </a> </td> </tr> <tr valign="top"> <td> <a > <font color="#002c99"> <img height="9" alt="嫻嬭瘯姝g‘鐨勪簨鎯? hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /> </font> </a> </td> <td class="onThisPage"> <a > <font color="#002c99">嫻嬭瘯姝g‘鐨勪簨鎯?/font> </a> </td> </tr> <tr valign="top"> <td> <a > <font color="#002c99"> <img height="9" alt="鍒涘緩緇存姢嫻嬭瘯" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /> </font> </a> </td> <td class="onThisPage"> <a > <font color="#002c99">鍒涘緩緇存姢嫻嬭瘯</font> </a> </td> </tr> <tr valign="top"> <td> <a > <font color="#002c99"> <img height="9" alt="鍒涘緩鏄撹鎬ф祴璇? hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /> </font> </a> </td> <td class="onThisPage"> <a > <font color="#002c99">鍒涘緩鏄撹鎬ф祴璇?/font> </a> </td> </tr> <tr valign="top"> <td> <a > <font color="#002c99"> <img height="9" alt="鍦ㄤ綘鐨勮緗柟娉曚腑閬垮厤閮ㄥ垎鐩稿叧鐨勪唬鐮? hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /> </font> </a> </td> <td class="onThisPage"> <a > <font color="#002c99">鍦ㄤ綘鐨勮緗柟娉曚腑閬垮厤閮ㄥ垎鐩稿叧鐨勪唬鐮?/font> </a> </td> </tr> <tr valign="top"> <td> <a > <font color="#002c99"> <img height="9" alt="鎬葷粨" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /> </font> </a> </td> <td class="onThisPage"> <a > <font color="#002c99">鎬葷粨</font> </a> </td> </tr> </tbody> </table> <a name="EQB"> </a> <h2>鍗曞厓嫻嬭瘯鐨勪俊浠?/h2> <p>鍦ㄨ繖涓儴鍒嗭紝鎴戝皢鐣ヨ堪鍑轟竴浜涙渶閫氱敤鐨勪俊浠伙紝榪欎簺淇′換鏉ヨ嚜浜庡湪浣跨敤澶ч噺鍗曞厓嫻嬭瘯鑾峰緱鐨勫ソ澶勫拰瑙i噴涓轟粈涔堣繖浜涗俊浠婚氬父涓嶆槸蹇呴』鐪熷疄鐨勩傜劧鍚庢垜浠細甯姪鎮ㄥ湪鎮ㄧ殑宸ョ▼涓嫢鏈夎繖浜涗俊浠匯?/p> <p> <b>鏇村姞綆鍗曠殑璺熻釜</b> <b>Bug</b>聽 褰撶劧榪欏茍涓嶆槸蹇呴』鐨勶紝閭d箞鎮ㄦ庝箞鐭ラ亾鎮ㄧ殑嫻嬭瘯鏄紜殑錛?鏄惁瀛樺湪鍦ㄤ竴浜涙祴璇曠幆鑺傛祴璇曞け璐ョ殑鎯呭喌錛熷彟澶栨偍鍙堝浣曠煡閬撴偍鐨勬祴璇曡鐩栦簡緋葷粺涓灝戠殑浠g爜閲忥紵鏄惁嫻嬭瘯鍒頒簡紼嬪簭涓殑閿欒錛岄敊璇張鍦ㄥ摢閲岀瓑絳夌殑闂銆?/p> <p>褰撲綘鍦ㄤ綘鐨勫崟鍏冩祴璇曚腑鍙戠幇浜哹ug鍚庡張浼氬彂鐢熶粈涔堜簨鎯呭摢錛熶綘浼氱獊鐒墮棿寰楀埌寰堝涓庢効鎰忛敊璇殑鍙嶉錛宐ug琚彂鐜幫紝浣嗘槸闂騫朵笉鍦ㄤ綘嫻嬭瘯鐨勪唬鐮佷腑銆備綘鐨勬祴璇曠殑閫昏緫瀛樺湪涓涓猙ug錛屽洜姝ゆ祴璇曞け璐ヤ簡銆傝繖浜沚ug涔熸槸鎮ㄦ渶闅捐媯鏌ュ嚭鏉ョ殑錛屽洜涓烘偍閫氬父浼氬幓媯鏌ユ偍鐨勫簲鐢ㄧ▼搴忚屼笉浼氬幓媯嫻嬩綘鐨勬祴璇曠幆鑺傘傚湪榪欓儴鍒嗕腑錛屾垜浼氬睍紺虹粰浣犲浣曠‘璁ゅぇ閲忕殑鍗曞厓嫻嬭瘯錛屼簨瀹炰笂灝辨槸浣垮緱璺熻釜bug鍙樺緱鏇村姞瀹規槗銆?/p> <p> <b>浠g爜鏇村姞渚夸簬緇存姢</b>聽浠庢渶緇堢偣鑰冭檻錛屼綘鍙互鍊懼悜浜庤涓鴻繖浜涗俊浠誨茍涓嶆槸蹇呴』鐨勶紝褰撶劧浣犳槸瀵圭殑錛岃鎴戜滑鍘昏錛屼唬鐮佷腑姣忎釜閫昏緫鏂規硶鑷沖皯瑕佹湁涓涓祴璇曟柟娉曪紙褰撶劧錛屼綘鍙兘鎷ユ湁涓涓互涓婄殑鏂規硶錛夊湪涓涓ソ鐨勬祴璇曡鐩栫殑宸ョ▼涓紝澶ф鏈夌櫨鍒嗕箣鍏崄鐨勪唬鐮佹槸鑳藉寰楀埌鍗曞厓嫻嬭瘯鐨勶紝鐜板湪涓嶅緱涓嶈冭檻鍒版祴璇曚篃鏄琚淮鎶ょ殑錛屽鏋滈拡瀵逛竴涓鏉傜殑閫昏緫鏂規硶浣犳湁20涓祴璇曪紝閭d箞褰撲綘鍚戣繖涓柟娉曟坊鍔犱竴涓弬鏁版椂浼氬彂鐢熶粈涔堜簨鎯呭摢錛熸祴璇曟棤娉曠紪璇戙傚綋浣犱慨鏀逛簡綾葷殑緇撴瀯鐨勬椂鍊欏悓鏍蜂細鍙戠敓榪欐牱鐨勪簨鎯呫傝繖鏃朵綘紿佺劧鍙戠幇涓轟簡鑳借浣犵殑搴旂敤紼嬪簭緇х畫宸ヤ綔浣犺嚜宸遍渶瑕佹敼鍙樺ぇ閲忕殑嫻嬭瘯銆傚綋鐒惰繖浼氳姳璐逛綘澶ч噺鐨勬椂闂淬?/p> <p>涓轟簡浣胯繖涓俊浠葷‘璁や笅鏉ワ紝浣犻渶瑕佺‘璁や綘鐨勬祴璇曟槸渚夸簬緇存姢鐨勩備繚鎸丏RY瑙勫垯鍐欏叆錛氫笉瑕侀噸澶嶄綘鑷繁銆傛垜浠皢鏇村姞鎺ヨ繎鐨勬潵鐪嬭繖涓棶棰樸?/p> <p> <b>浠g爜鏇村姞瀹規槗琚悊瑙?/b>聽 鍗曞厓嫻嬭瘯鐨勫ソ澶勯氬父騫墮潪鏄漢浠渶鍒濇墍鏈熷緟鐨勶紝鍦ㄤ竴涓伐紼嬩腑鑰冭檻淇敼涓浜涗綘涔嬪墠浠庢病鏈夌湅榪囩殑浠g爜(姣旀柟璇?涓涓壒孌婄殑綾繪垨鑰呮柟娉?.浣犲皢濡備綍鍔ㄦ墜澶勭悊榪欎簺浠g爜錛熶綘鍙兘闇瑕佸湪欏圭洰涓幓嫻忚榪欎簺鐗瑰畾鐨勭被鎴栬呮柟娉曚嬌鐢ㄧ殑浠g爜錛岀悊鎵褰撶劧錛屽崟鍏冩祴璇曞氨鏄繖鏍蜂緥瀛愮殑涓涓緢濂界殑鍦烘墍銆傚悓鏃訛紝褰撴紜啓鍏ョ殑鏃跺欙紝鍗曞厓嫻嬭瘯鍙互涓哄伐紼嬫彁渚涗竴涓狝PI鏂囦歡鐨勫鏄撹鍙栫殑璁劇疆錛屼嬌寰楁枃妗g殑澶勭悊鍜屼唬鐮佺殑鐞嗚В瀵逛簬鏁翠釜鍥㈤槦涓殑鏂拌佸紑鍙戣呬竴鏍風殑綆鍗曪紝渚挎嵎銆傜劧鑰岋紝榪欎簺鍙兘鍦ㄦ祴璇曟槸鏄撹鐨勫拰瀹規槗鐞嗚В鐨勬儏鍐典笅鎵嶈兘琚‘璁わ紝榪欎釜瑙勫垯寰堝鐨勫崟鍏冩祴璇曞紑鍙戣呭茍涓嶄細閬靛驚銆傛垜灝嗚榪拌繖涓俊浠伙紝鐒跺悗鍦ㄨ繖綃囨枃绔犵殑鏄撹嫻嬭瘯鐨勯儴鍒嗙粰浣犲睍鐜板浣曞湪鍘誨啓鏄撹鐨勫崟鍏冩祴璇曘?/p> <div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"> <a > <img height="9" alt="榪斿洖欏甸" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /> </a> <a class="topOfPage" > <font color="#002c99">榪斿洖欏甸</font> </a> </div> <a name="EDC"> </a> <h2>嫻嬭瘯姝g‘鐨勪簨鎯?/h2> <p>鏂版潵鑰呭湪Test Driven Development (TDD)涓竴涓渶閫氬父鐨勯敊璇氨鏄粬浠氬父浼氭悶娣?Fail by testing something illogical."涓殑"Fail first"瑕佹眰銆備緥濡傦紝浣犲彲浠ョ敤涓嬮潰鐨勮鏍煎紑濮嬭繖涓柟娉曪細</p> <pre class="codeSample">' returns the sum of the two numbers Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer </pre> <p>浣犲彲浠ュ悜濡備笅鐨勬柟寮忓啓涓涓け璐ユ祴璇曪細</p> <pre class="codeSample"><TestMethod()> _ Public Sub Sum_AddsOneAndTwo() Dim result As Integer = Sum(1, 2) Assert.AreEqual(4, result, "bad sum"); End Sub </pre> <p>鍒濈湅涓婂幓榪欎釜澶勭悊鍍忔槸涓涓啓澶辮觸嫻嬭瘯鐨勫ソ鐨勬柟娉曪紝瀹冨畬鍏ㄩ敊澶變簡浣犲啓閿欒嫻嬭瘯鐨勫垵濮嬬偣銆?/p> <p>涓涓け璐ユ祴璇曢獙璇佷簡鍦ㄤ唬鐮佷腑瀛樺湪涓浜涢敊璇紝褰撲綘鐨勬祴璇曞畬鎴愬悗榪欎釜嫻嬭瘯搴旇鏄氳繃鐨勶紝鐜板湪鐨勪緥瀛愪腑錛屾棤璁哄浣曪紝嫻嬭瘯閮藉皢浼氬け璐ワ紝鍗充嬌鏄唬鐮佸畬鎴愶紝鍥犱負嫻嬭瘯閫昏緫涓婁笉鏄紜殑銆傚鏋滃笇鏈涙祴璇曢氳繃嫻嬮渶瑕佹祴璇曡嚜韜繘琛屼慨鏀光曗曡屼笉鏄▼搴忕殑浠g爜鐨勬敼鍙橈紙褰撶▼搴忎唬鐮佹敼鍙樼殑鏃跺欙紝鏄痶est-first瑙勫垝鐨勬剰鍥撅級綆鐭潵璇達紝榪欎釜嫻嬭瘯涓嶄細鍙嶆槧鍑虹▼搴忎唬鐮佸畬鎴愬悗鐨勬渶緇堢殑緇撴灉錛屽洜姝よ繖涓笉鏄竴涓ソ鐨勬祴璇曘?/p> <p>TDD涓竴涓ソ鐨勬祴璇曡姹備綘鍘諱慨鏀逛唬鐮侊紝浠庤屼嬌瀹冭兘澶熸寜鐓ф兂瑕佺殑鏂瑰紡宸ヤ綔錛岃繖涓鐐硅鑳滀簬寮鴻揩浣犲幓鍙嶆槧鐜板湪鐨勭湡瀹炴儏鍐墊垨鑰呬竴涓潪閫昏緫瑕佹眰鐨勬復鏈涚殑緇撴灉銆備緥濡傦紝褰?錛?榪斿洖0鏃跺氨鎰忓懗鐫嫻嬭瘯澶辮觸銆傝繖涓畝鍗曠殑渚嬪瓙鍜岃繖縐嶆儏鍐墊槸鐩鎬技鐨勶紝鍦ㄧ粌涔犱腑錛屽鏋滅幇鍦ㄧ殑闇姹傛槸鍦ㄥ伐浣滅殑錛屾祴璇曞簲璇ュ彲浠ュ弽鏄犱綘鎵鏈熷緟鐨勭粨鏋滐紝鐒跺悗浣犲彲浠ヨ皟鏁寸幇鍦ㄤ唬鐮佺殑鎯呭喌鍘婚氳繃榪欎釜嫻嬭瘯銆?/p> <p>浣滀負涓涓鍒欙紝涓涓凡緇忚皟閫氱殑嫻嬭瘯涓嶅簲璇ヨ縐婚櫎鎺夛紝鍥犱負榪欎釜嫻嬭瘯鍦ㄧ淮鎶ゅ伐浣滀腑鍙互鐢ㄤ簬鎭㈠嫻嬭瘯銆備粬浠湪浣犳敼鍙樹唬鐮佹椂鐢ㄦ潵紜畾浣犳病鏈夋崯瀹沖埌鐜板湪宸茬粡宸ヤ綔鐨勫嚱鏁般傝繖灝辨槸涓轟粈涔堜綘涓嶅簲璇ヤ慨鏀歸偅浜涘凡緇忛氳繃鐨勬祴璇曪紝闄ら潪鏄竴浜涘緢灝忕殑淇敼錛屼緥濡傚鍔犲畠鐨勫彲璇繪э紙鎹㈠彞璇濊錛屽垎瑙f祴璇曪級</p> <p> <b>褰撲竴涓祴璇曢潪姝e父澶辮觸</b>聽 鏈夋椂浣犲彲鑳介亣鍒板け璐ョ殑嫻嬭瘯錛岃岃繖鏃朵綘瀵逛唬鐮佺殑鏀瑰彉鏄畬鍏ㄥ悎鐞嗙殑銆傝繖閫氬父鏄洜涓轟綘閬囧埌浜嗗啿紿佺殑闇姹傘備竴鑸潵璇達紝鍙兘鏄竴涓柊鐨勯渶姹傦紙涓涓敼鍙樼殑鐗規э級涓庝竴涓棫鐨勫彲鑳藉凡緇忎笉鍐嶆湁鏁堢殑闇姹傚彂鐢熶簡鍐茬獊銆傝繖鏈変袱縐嶅彲鑳斤細</p> <table class="numberedList" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr valign="top"> <td class="listNumber" nowrap="" align="right"> <p>1.</p> </td> <td> <p>鍦ㄦ棫鐨勯渶姹傛垨鑰呮棤鏁堟垨鑰呭湪鍒嫻嬭瘯鐨勬儏鍐典笅鍒犻櫎琚獙璇佹湰璐ㄤ笂涓嶅啀鏈夋晥鐨勫け璐ョ殑嫻嬭瘯</p> </td> </tr> <tr valign="top"> <td class="listNumber" nowrap="" align="right"> <p>2.</p> </td> <td> <p>鏀瑰彉鏃х殑嫻嬭瘯浣夸綘鍙互嫻嬭瘯鏂扮殑瑕佹眰錛堟湰璐ㄤ笂浣跨敤鏂扮殑嫻嬭瘯錛夛紝鐒跺悗鍦ㄦ柊鐨勮緗笅錛堟祴璇曠殑閫昏緫鐘舵佺浉鍚岋紝浣嗘槸鍒濆鍔熻兘鍑芥暟鍙兘鏈夋墍涓嶅悓錛夋祴璇曟棫鐨勯渶姹傘?/p> </td> </tr> </tbody> </table> <p>鑰屾湁鏃跺欎竴涓祴璇曞湪浣跨敤涓嶅畬鏁寸殑鎶鏈幓瀹屾垚浠誨姟鐨勬椂鍊欎篃鏄湁鏁堢殑錛屼緥濡傦紝浣犳湁涓涓垚鍛樼被甯︽湁涓涓狥OO鏂規硶錛屽畠琛ㄧ幇涓烘煇鍑犵琛屼負錛屽畠宸茬粡緇忕敱Test鍦╔騫村墠嫻嬭瘯瀹屾垚錛岀劧鍚庣幇鍦ㄤ竴浜涘叾浠栫殑闇姹傚姞浜嗚繘鏉ワ紝鏂規硶鐨勯昏緫澧炲己浜嗭紝浠庤屽彲浠ュ幓澶勭悊涓浜涚被浼間簬鍦ㄨ幏鍙栨暟鎹椂涓㈠け涓浜涘弬鏁扮殑寮傚父澶勭悊銆備絾榪欐椂錛岀獊鐒禩est X澶辮觸浜嗭紝铏界劧鍦ㄦ祴璇曡繖涓嚱鏁扮殑鏃跺欏彧鏄嬌鐢ㄤ簡鍚屾牱鐨勭被銆傝繖涓祴璇曠殑澶辮觸鏄洜涓哄湪璋冪敤鏂規硶涔嬪墠涓㈠け浜嗕竴浜涘垵濮嬪鐞嗘楠ゃ?/p> <p>榪欏茍涓嶆剰鍛崇潃浣犻渶瑕佺Щ闄est X錛屼綘灝嗕涪澶卞浜庝竴浜涢噸瑕佸姛鑳界殑嫻嬭瘯錛岃繖鏃朵綘搴旇鍘誨叧蹇冮偅浜涘垵濮嬪寲鏃剁殑闂錛岃屼笉鏄敼鍙樼被鐨勫垱寤轟互鐢ㄦ潵閫傚簲浣犳柊鐨勬剰鍥俱?/p> <p>褰撶劧濡傛灉浣犻偅閲屾湁200涓祴璇曢兘鏄洜涓烘棫鐨勭粨鏋勫鑷寸殑澶辮觸錛屼綘灝卞簲璇ユ壘鍒拌繖涓棶棰樻潵緇存姢浣犵殑嫻嬭瘯銆傝繖灝辨槸涓轟粈涔堜綘搴旇鎬繪槸縐婚櫎浣犳祴璇曚腑鐨勫壇鏈挨鍏舵槸鍦ㄧ敓浜т唬鐮佷腑銆?/p> <p> <b>嫻嬭瘯瑕嗙洊鍜屾祴璇?/b> <b>Angles</b>聽 浣犲浣曠煡閬撴槸鍚︿綘鐨勬柊浠g爜鏄竴涓ソ鐨勮鐩栵紵褰撹瘯鍥劇Щ鍔ㄤ竴涓摼鎺ユ垨鑰呬竴涓害鏉熸鏌ュ悗錛屽鏋滄墍鏈夌殑嫻嬭瘯渚濈劧閫氳繃錛岄偅涔堜綘灝辨病鏈夎凍澶熺殑浠g爜澶嶅埗鐒跺悗浣犲彲鑳介渶瑕佹坊鍔犲叾浠栫殑嫻嬭瘯鍗曞厓銆?/p> <p>紜浣犳坊鍔犳紜祴璇曠殑鏈濂芥柟娉曞氨鏄祴璇曚竴浜涙渶騫沖父鐨勮鍜屾鏌ョ洿鍒扮敤闈炲父鐨勬墜孌典嬌瀹冨嚭閿欍傝繖涓篃璁稿緢闅撅紝浣嗘槸濡傛灉浣犱笉鑳借冭檻鍑轟竴涓浠g爜鍑洪敊鐨勬柟娉曪紝浣犲氨鍙兘娌℃湁濂界殑鐞嗙敱鍦ㄦ渶鍒濈殑鍦版柟鍐欎笅榪欒浠g爜銆?/p> <p>浣犱笉鐭ラ亾浠涔堟椂鍊欎笅涓涓紑鍙戣呬細璇曞浘榪愯浣犵殑紼嬪簭錛屼粬鍙兘浼樺寲鎴栬呴敊璇殑鍒犻櫎涓浜涘寘鍚湰璐ㄧ殑琛屻傚鏋滀綘娌℃湁涓涓祴璇曪紝瀹冨氨浼氬け璐ワ紝鍏朵粬鐨勫紑鍙戣呭彲鑳戒笉浼氱煡閬撲粬浠姱浜嗛敊璇?/p> <p>浣犱篃鍙兘璇曞浘鍒╃敤涓浜涘父閲忓幓鏇夸唬涓浜涘凡緇忛氳繃浜嗙殑嫻嬭瘯涓皟鐢ㄧ殑鍚勭鍚勬牱鐨勫弬鏁幫紝渚嬪錛岀湅涓嬮潰鐨勬柟娉曪細</p> <pre class="codeSample">Public Function Sum(ByVal x As Integer, ByVal y As Integer, _ ByVal allowNegatives As Boolean) As Integer If Not allowNegatives Then Throw New Exception() Return x + y End Function </pre> <p>浣犲彲浠ユ墦涔變唬鐮佸幓嫻嬭瘯瑕嗙洊錛岃繖鏈変竴浜涘叧浜庡浣曟祴璇曠殑鍙樺寲錛?/p> <pre class="codeSample">' Try this... If Not True Then ' replace flag with const If x < 0 OrElse y < 0 Then Throw New Exception() End If ' Or this... If Not allowNegatives Then ' replace check with const If False OrElse y < 0 Then Throw New Exception() End If </pre> <p>濡傛灉鎵鏈夌殑嫻嬭瘯渚濈劧閫氳繃錛岄偅涔堜綘緙哄皯浜嗕竴涓祴璇曪紝鍙﹀涓涓孩鑹叉爣蹇楁槸鍦ㄤ綘涓哄縐嶇浉鍚屽兼祴璇曠殑媯鏌ャ傚涓嬶細</p> <pre class="codeSample">Assert.AreEqual(3, retval) </pre> <p>涓浜涙柟娉曠殑鍏崇郴鍙湅涓嬈★紙鍦ㄤ竴涓祴璇曚腑錛夋剰鍛崇潃浣犲彲浠ュ畨鍏ㄧ殑榪斿洖3浣滀負涓涓鹼紝鐒跺悗鎵鏈夌殑閽堝榪欎釜鏂規硶鐨勬祴璇曢兘灝嗛氳繃錛岃繖涓綋鐒舵剰鍛崇潃浣犱涪澶變簡涓涓祴璇曘傚鏋滀綘鍦ㄥ崟鍏冩祴璇曚腑媯鏌ヤ竴涓嬩唬鐮侊紝瀹冨氨寰堝鏄撹媯鏌ュ嚭鏉ャ?/p> <p>紜繚浣犵殑嫻嬭瘯鍐欑殑瓚婄畝鍗曡秺濂斤紝涓涓崟鍏冩祴璇曚竴鑸笉鍖呮嫭涓涓猧f switch鎴栬呭叾浠栦換浣曠殑閫昏緫澹版槑銆傚鏋滀綘鍙戠幇浣犺嚜宸卞湪浣犵殑嫻嬭瘯涓啓浜嗕竴浜涚被浼間簬閫昏緫澹版槑鐨勪笢瑗匡紝榪欐槸涓涓ソ鐨勬満浼氭潵嫻嬭瘯涓涓互涓婄殑浜嬩歡錛屽湪鍋氳繖鏍風殑鎿嶄綔鐨勬椂鍊欙紝浣犱細浣垮緱浣犵殑嫻嬭瘯姣旇鍜岀淮鎶ゆ洿鍔犵殑鍥伴毦錛屽湪鐢熶駭浠g爜涓悓鏍峰姝ゃ備繚鎸佷綘鐨勬祴璇曠畝鍗曪紝浣犲湪鐢熶駭浠g爜涓彂鐜癰ug瑕佽儨浜庡湪浣犵殑鍗曞厓嫻嬭瘯涓?/p> <p> <b>浣挎祴璇曟槗浜庤繍琛?/b>聽 濡傛灉浣犵殑嫻嬭瘯騫朵笉瀹規槗榪愯錛岄偅涔堜漢浠笉浼氫俊浠誨畠銆備綘鐨勫簲鐢ㄧ▼搴忔渶鏈夊彲鑳芥湁涓嬮潰涓ょ綾誨瀷鐨勬祴璇曪細</p> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>嫻嬭瘯鍦ㄦ病鏈変換浣曢厤緗殑鎯呭喌涓嬪鉤紼崇殑榪愯錛堣繖縐嶇被鍨嬬殑嫻嬭瘯錛屾垜浠彲浠ュ湪浠諱綍鐨勬満鍣ㄤ笂錛屽湪浠g爜鐨勬渶緇堢増涓婃垨鑰呭湪婧愭帶鍒朵笂嫻嬭瘯錛屽茍涓斿仛鍒版病鏈変換浣曟晠闅滅殑嫻嬭瘯錛?/p> </td> </tr> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>鍦ㄨ繍琛屽墠闇瑕佷竴浜涢厤緗?</p> </td> </tr> </tbody> </table> <p>絎竴縐嶇被鍨嬫槸浣犲簲璇ユā浠跨殑錛岀浜岀綾誨瀷鏄綘閫氬父鍋氱殑錛屽挨鍏朵綘濡傛灉浣犳槸涓涓柊鐨勫崟鍏冩祴璇曘傚鏋滀綘鍙戠幇浣犺嚜宸辨祴璇曟椂鏈夊緢澶氱殑鐗規畩鐨勯渶姹傦紝鐜板湪鏄甯哥殑錛屼絾鏄噸瑕佺殑涓鐐瑰氨鏄綘瑕侀殧紱誨嚭涓や釜緇勮浠栦滑鑳藉鍗曠嫭鐨勫幓鍋氭祴璇曘?/p> <p>鎴戜滑鐨勬兂娉曟槸浠繪剰涓涓紑鍙戣呴兘搴旇鏈夎兘鍔涗慨鏀瑰拰榪愯涓浜涗笉闇瑕佽緗壒孌婄殑閰嶇疆鐨勬祴璇曡繘琛屾祴璇曘傚鏋滆繖鏈変竴浜涙祴璇曢渶瑕佸湪榪愯鍓嶆湁鐗規畩鐨勫叧娉紝寮鍙戣呭簲璇ョ煡閬撲粬浠紝鐒跺悗浠栧彲浠ヨ姳涓浜涙椂闂村涔犺繖浜涙祴璇曠殑鏂規硶銆傚洜涓哄緢澶氱殑寮鍙戣呮瘮杈冪殑鎳掞紙褰撶劧錛屼笉鏄綘錛夛紝浣犲彲浠ヨ鎯籌紝浠栦滑涓嶄細鍘誨仛閭d簺鐗規畩鐨勮緗紝鐩稿弽錛屼粬浠細璁╂祴璇曞け璐ュ洜涓轟粬浠湁鏇村ソ鐨勪簨鎯呭幓鍋氥?/p> <p>褰撶敤鎴瘋嫻嬭瘯澶辮觸鏃訛紝浠栦滑寮濮嬭冭檻浠栦滑涓嶈兘澶熶俊浠昏繖浜涙祴璇曚簡銆傚緢闅捐鏄惁嫻嬭瘯鍙互鍦ㄤ竴涓腑鎵懼埌涓涓寮忕殑bug鎴栬呭彧鏄竴涓敊璇殑瀹氫綅銆傚紑鍙戣呭彲鑳戒笉鏄庣櫧涓轟粈涔堟祴璇曡呬細鍦ㄤ竴寮濮嬪氨鎵ц澶辮觸銆備竴鏃︿粬浠笉鍐嶄俊浠諱綘鐨勬祴璇曪紝寮鍙戣呭皢浼氬仠姝㈣繍琛屽畠浠紝閭d箞bug灝變細椹葷暀鍦ㄧ▼搴忎腑錛屼箣鍚庝竴榪炰覆鐨勯夯鐑﹀氨鏉ヤ簡銆傘傘?/p> <p> <b>涓轟簡閬垮厤榪欎歡浜嬫儏錛岀‘璁や綘鎬繪槸鏈変竴涓粍鍑嗗濂戒簡鍘繪祴璇曪紝嫻嬭瘯紼嬪簭鍒欐槸鍙互瀹夊叏榪愯錛屽彲淇′換鐨勩傛妸閭d簺灞炰簬閰嶇疆鎸戞垬緇勭殑嫻嬭瘯鏀懼埌涓嶅悓鐨勬枃浠跺す錛屾爲鎴栬呭伐紼嬩腑錛屽悓鏃舵爣璁扮壒孌婄殑璇存槑鎸囨槑浠栦滑鍦ㄨ繍琛屽墠闇瑕佸仛浠涔堛傚畬鎴愯繖浜涘悗錛屽紑鍙戣呭彲浠ヤ笉鎶曞叆鏃墮棿鍘婚厤緗氨寮濮嬫祴璇曞伐浣溿傚綋浠栦滑鏈夋椂闂村拰闇瑕佹椂錛屼粬浠篃鍙互閰嶇疆錛岃繍琛屾洿澶氱殑嫻嬭瘯鐜妭銆?/b> </p> <div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"> <a > <img height="9" alt="榪斿洖欏甸" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /> </a> <a class="topOfPage" > <font color="#002c99">榪斿洖欏甸</font> </a> </div> <a name="EZD"> </a> <h2>鍒涘緩緇存姢嫻嬭瘯</h2> <p>鎴戜滑搴旇璇曠潃閬垮厤嫻嬭瘯縐佹湁鎴栦繚鎶ゆ垚鍛樸傝繖綃囨枃绔犱篃璁歌兘澶熷府鍔╀竴浜涗漢瑙e喅涓閮ㄥ垎闂錛屼絾鏄垜寰堝潥鍐崇浉淇$櫨鍒嗕箣涔濆崄涔濈殑鏃墮棿錛屼綘鍙互鍏ㄩ潰鐨勬祴璇曚竴涓被錛岄氳繃緙栧啓涓浜涗笌瀹冪殑鐙珛鍏叡鎺ュ彛鐩稿弽鐨勫崟鍏冩祴璇曘傛祴璇曠鏈夋垚鍛樺彲浠ヤ嬌浣犵殑嫻嬭瘯鏇村姞鑴嗗急錛屽鏋滆繖涓渶瑕佽嫻嬭瘯鐨勭被鐨勪竴浜涘唴鍦ㄦ柟闈㈢暐鏈夋敼鍔ㄧ殑璇濄備綘搴旇浣跨敤閫氳繃璋冪敤涓浜涗唬鐮侀噷鍒鐨勫叕鍏卞姛鑳借繖涓鏂規硶鍘繪祴璇曠鏈夊姛鑳姐傚綋浣犱緷鐒惰兘澶熺‘瀹氬叏閮ㄥ姛鑳藉茍娌℃湁鏀瑰彉鐨勬椂鍊欙紝浠呬粎嫻嬭瘯鍏叡鎴愬憳浼氬鑷存祴璇曢伃鍙楀父閲忎唬鐮佺殑鍥犲紡鍒嗚В浠ュ強鍐呴儴鐨勬墽琛屾儏鍐墊敼鍙樸?/p> <p> <b>鍦ㄥ彲鑳界殑鏃跺欙紝搴旇閲嶆柊浣跨敤浣犵殑鍒涢犵墿錛屽鐞嗚繃紼嬶紝鍜屽0鏄庝唬鐮併備笉瑕佸湪涓涓崟鍏冩祴璇曚腑鐩存帴鐨勫垱寤虹被鐨勫疄渚嬨傚鏋滀綘鍦ㄤ換浣曞茍涓嶅寘鍚湪姝ゅ崟鍏冩祴璇曟鏋朵腑鐨勭被鍓嶉潰鐪嬪埌榪欎釜鍗曡瘝鈥?/b>new鈥濓紝浣犲簲璇ヨ冭檻涓涓嬪皢浣犲垱閫犵殑浠g爜鏀懼湪涓涓壒孌婄殑鏁翠綋鏂規硶涔嬩腑錛屽畠鍙互涓轟綘鍒涘緩涓涓璞″疄渚嬨備綘鍙互鍒版椂鍐嶉噸鏂頒嬌鐢ㄨ繖涓柟娉曟潵鑾峰緱浣犵殑嫻嬭瘯鍦ㄥ叾浠栨祴璇曚箣涓殑鏈鏂板疄渚嬨傝繖鏍峰彲浠ュ府鍔╀綘鏉ヤ繚鎸佽繖涓祴璇曠淮鎶ゆ墍闇鐨勬椂闂達紝鐒跺悗鍦ㄦ祴璇曡繘琛岀殑鏃跺欙紝浠庡浠g爜鏃犳硶棰勬枡鐨勬敼鍙樹箣涓繚鎶や綘鐨勬祴璇曘備綔涓轟竴涓緥瀛愶紝<a target="_blank"><b><font color="#002c99">Figure聽1</font></b></a>灞曠ず浜嗕竴瀵圭畝鍗曠殑嫻嬭瘯錛屽畠浣跨敤浜嗕竴涓狢alc綾匯?/p> <p>鍋囪浣犳湁20錛屾垨鑰呬綘鐢氳嚦鏈?00錛屼笌Calc綾誨仛鐩稿弽嫻嬭瘯錛屾墍鏈夎繖浜涚湅璧鋒潵浠や漢鍚冩儕鐨勭浉浼箋傜幇鍦ㄤ竴涓鍒掔殑鏀瑰彉榪嬌浣犱笉寰椾笉鍒犻櫎榛樿鐨凜alc鏋勯犲櫒騫朵笖浣跨敤涓涓惈鏈変竴浜涘弬鏁扮殑涓嶅悓鐨勬瀯閫犲櫒銆傞┈涓婏紝浣犳墍鏈夌殑嫻嬭瘯灝辮鏆傚仠浜嗐備綘鍙兘鍙互寰堣交鏄撶殑鍙戠幇闂鐨勫叧閿茍淇瀹冿紝浣嗕綘涔熷彲鑳藉仛涓嶅埌銆傛渶涓昏鐨勯棶棰樻槸浣犲皢浼氭氮璐瑰緢澶氬疂璐墊椂闂村湪淇悊浣犵殑嫻嬭瘯涓婇潰銆傚鏋滀綘鍦ㄤ綘鐨勬祴璇曠被涔嬩腑浣跨敤涓涓暣浣撶殑鏂規硶鍘誨垱寤篊alc 瀹炰緥錛屽氨鍍?a target="_blank"><b><font color="#002c99">Figure聽2</font></b></a>鎵鏄劇ず鐨勯偅鏍鳳紝榪欎簺灝卞茍涓嶆槸涓棶棰樸?/p> <p>鎴戝凡緇忓嫻嬭瘯鍋氫簡涓浜涙敼鍙樺凡浣垮畠浠兘澶熷叿鏈夋洿澶氬彲緇存姢鎬с傞鍏堬紝鎴戝皢鏂板垱寤虹殑浠g爜榪佺Щ鑷沖彲浠ュ啀搴︿嬌鐢ㄧ殑鏁翠綋鏂規硶涔嬩腑銆傝繖灝辨剰鍛崇潃鎴戝彧闇浠呬粎鏀瑰彉涓涓畝鍗曠殑鏂規硶浠ヤ嬌寰楀湪榪欎釜嫻嬭瘯綾諱腑鐨勬墍鏈夋祴璇曞湪涓涓柊鐨勬瀯閫犲櫒涓殑鑳藉姝e父鐨勫伐浣溿傚彟澶栦竴涓負鍒涢犻棶棰樿岃鐨勭畝鍗曡В鍐蟲柟娉曟槸鎶婂垱浣滅墿榪佺Щ鍒版祴璇曠被鐨?lt;TestInitialize()>鏂規硶涔嬩腑銆備笉騫歌繍鐨勬槸錛岃繖涓兘澶熷緢濂界殑宸ヤ綔浠呬粎鍦ㄤ綘閲嶆柊浣跨敤涓涓璞″茍鍦ㄤ竴浜涙祴璇曚腑鎶婂畠褰撲綔涓涓眬閮ㄧ被鍙橀噺銆傚鏋滀綘浠呬粎涓轟竴浜涙祴璇曚嬌鐢ㄥ畠錛堥儴鍒嗙浉鍏蟲垚鍛橈級錛屼綘鍊掍笉濡傚湪嫻嬭瘯涓皢瀹冧滑瀹炰緥鍖栵紝騫朵笖浣垮畠浠洿鍏鋒槗璇繪с?/p> <p>欏轟究涓鎻愮殑鏄紝璇鋒敞鎰忥紝鎴戝凡緇忓皢鏂規硶鍛藉悕涓篎actory_CreateDefaultCalc 銆傛垜寰堝枩嬈㈠皢鎴戞祴璇曚腑鐨勪換浣曞府鍔╂柟娉曠敤鐗規畩鐨勫墠緙鏉ュ懡鍚嶏紝榪欐牱鎴戝氨鑳藉緢杞繪槗鐨勬帉鎻″畠鏄仛浠涔堢敤鐨勩傝繖鏍峰鏄撹鎬т篃鏄潪甯告湁甯姪鐨勩?/p> <p>鎴戠殑絎簩涓敼鍙樻槸閲嶆柊浣跨敤嫻嬭瘯涓殑澹版槑浠g爜錛屽茍灝嗚繖孌典唬鐮佽縼縐誨埌涓涓‘璁ゆ柟娉曚箣涓傛墍璋撶‘璁ゆ柟娉曟槸浣犳祴璇曚腑鐨勪竴涓彲鍐嶅害浣跨敤鐨勬柟娉曪紝 榪欎釜鏂規硶鍖呭惈浜嗕竴涓0鏄庤鍙ヤ絾鏄畠鍙互鎺ュ彈涓嶅悓杈撳叆鍜屽湪杈撳叆鐨勫熀紜涓婅繘琛屾牎楠屻傚綋浣犲湪涓嶅悓杈撳叆鎴栬呬笉鍚岀殑鍒濆鐘舵佷笅涓嬈″張涓嬈$殑澹版槑鍚屼竴浜嬬墿鏃訛紝浣犲彲浠ヤ嬌鐢ㄧ‘璁ゆ柟娉曘傝繖涓鏂規硶鐨勪紭鐐規槸鏃嬌鍦ㄤ竴涓笉鍚岀殑鏂規硶閲岄潰澹版槑錛屽鏋滆繖涓0鏄庡け璐ヤ簡浣犲皢鍙互緇х畫淇濇湁涓涓紓甯稿鐞嗭紝鑰屼笖鍘熷璋冪敤嫻嬭瘯灝嗕細鏄劇ず鍦ㄦ祴璇曞け璐ヨ緭鍑虹獥鍙d箣涓?/p> <p>鎴戜篃鍦–alc 涓紶閫掑疄渚嬭屼笉鏄嬌鐢ㄤ竴涓眬閮ㄥ彉閲忥紝鍥犳鎴戠煡閬撴垜緇忓父浼犻掍竴涓疄渚嬶紝鑰屼笖榪欎釜瀹炰緥鏄皟鐢ㄦ祴璇曞皢鍏跺垵濮嬪寲鐨勩傚綋浣犳兂瑕佹敼鍙樺璞$姸鎬佹椂浣犲彲鑳芥兂瑕佸仛鍚屾牱鐨勪簨鎯咃紝涓句釜渚嬪瓙鏉ヨ錛屽綋鍦ㄦ祴璇曚笅鎴栬呭湪灝嗕細浼犻掔粰嫻嬭瘯鐨勫璞′笅閰嶇疆鐗規畩瀵硅薄鏃訛紝鍙互浣跨敤鐗規畩鐨凜onfigure_XX鏂規硶銆傝繖浜涙柟娉曞簲璇ヨ兘澶熻В閲婁粬浠厤緗竴涓璞″皢浼氱敤鏉ュ仛浠涔堢敤銆?a target="_blank"><b><font color="#002c99">Figure聽3</font></b></a>涔嬩腑鐨勪唬鐮佸氨鏄互涓婃柟娉曠殑瀹炰緥銆?/p> <p>榪欎釜嫻嬭瘯鎷ユ湁寰堝璁劇疆浠g爜鍙互鐢ㄦ潵澶勭悊鍚戞敞鍐岀鐞嗗櫒瀵硅薄涓坊鍔犲垵濮嬬姸鎬侊紝瀹冩槸榪欎釜嫻嬭瘯綾諱箣涓殑鎴愬憳銆傚湪姝ょ殑紜篃鏈変竴浜涢噸澶嶃?a target="_blank"><b><font color="#002c99">Figure聽4</font></b></a>鏄劇ず浜嗗湪鍒濆浠g爜涔嬪榪欎簺浜嬩緥鍦ㄥ洜寮忓垎瑙d箣鍚庡皢浼氬浣曞彉鍖栥?/p> <p>淇嫻嬭瘯鍏鋒湁闈炲父楂樼殑鍙鎬у拰紼沖畾鎬с備粎浠呴渶瑕佹敞鎰忕殑鏄笉瑕侀偅涔堢殑refactor浣犵殑嫻嬭瘯錛屼粬浠彲鑳戒細浠ヤ竴涓崟涓鐨勶紝涓嶅彲璇葷殑浠g爜琛屼綔涓虹粨鏉熴傚簲璇ユ敞鎰忕殑鏄垜鍦ㄨ繖閲屽彲鑳戒緷鐒朵嬌鐢ㄤ竴涓猇erify_XX 鏂規硶錛屼絾鏄繖騫朵笉鏄垜鐪熸瑕佸湪榪欓噷鍔犱互璇存槑鐨勩?/p> <p> <b>娑堥櫎嫻嬭瘯涔嬮棿鐨勪緷璧栧叧緋?/b> </p> <p>涓涓祴璇曞簲璇ヨ兘澶熻嚜鎴戠嫭绔嬨傚畠涓嶅簲璇ヤ笌鍏朵粬嫻嬭瘯鐩稿叧鑱旓紝涔熶笉搴旇渚濊禆浠諱綍鍏鋒湁鐗規畩榪愯欏哄簭鐨勬祴璇曪紝瀹冨簲璇ヨ兘澶熻幏寰椾綘鎵鍐欑殑鎵鏈夋祴璇曪紝鍙互闅忔剰榪愯鎵鏈夋祴璇曟垨鑰呭彧榪愯鍏朵腑鐨勪竴閮ㄥ垎錛屽茍涓旀槸浠ヤ換浣曢『搴忥紝鑰屼笖瑕佽兘澶熺‘淇濆畠浠棤璁烘庢牱閮藉簲璇ユ紜殑榪愯銆傚鏋滀綘涓嶈兘澶熸墽琛岃繖涓鍒欙紝浣犲皢浼氬彧鍦ㄦ煇縐嶇壒孌婄殑鎯呭喌涓嬫寜鐓ч鏈熺殑琛ㄧ幇鏉ヨ繍琛岀殑鐘跺喌涓嬬粨鏉熶綘鐨勬祴璇曘傝繖鏍峰瓙鐨勮瘽錛屽綋浣犲湪鏈緇堟湡闄愪笅涓庢鍚屾椂浣犺繕鎯崇‘瀹氫綘娌℃湁鍚戠郴緇熶箣涓紩榪涙柊鐨勯棶棰樼殑鏃跺欙紝褰撶劧灝變細鍑虹幇闂銆備綘鍙兘寰堝洶鎯戣屼笖鑰冭檻鐫鏄笉鏄綘鐨勪唬鐮佸嚭鐜伴棶棰橈紝榪欐椂錛屽湪浜嬪疄涓婏紝闂鍏跺疄浠呬粎鏄綘鐨勬祴璇曡繍琛岄『搴忔墍寮曡搗鐨勩傚洜姝わ紝浣犲彲鑳藉紑濮嬮敊榪囦簡涓浜涘湪嫻嬭瘯涓け璐ョ殑緇撴灉鑰屼笖浣垮畠瓚婂啓瓚婂皯銆傝繖灝嗕細鏄釜闀挎湡鐨勮繃紼嬨?/p> <p>濡傛灉浣犱粠涓涓祴璇曡皟鍑鴻嚦鍙︿竴涓祴璇曚箣涓紝浣犲簲璇ュ湪瀹冧滑涔嬮棿鍒涘緩涓涓粠灞炲叧緋匯備綘鏈川涓婅鏄湪涓涓祴璇曚腑嫻嬭瘯涓や釜浜嬬墿錛堟垜灝嗕細鍦ㄤ笅涓绔犱腑瑙i噴涓轟粈涔堣繖浼氭垚涓轟竴涓棶棰橈級銆傚氨鍙︿竴鏂歸潰鏉ヨ錛屽鏋滀綘鏈夋祴璇旴錛屽畠涓庢祴璇旳 鎵浜х敓鐨勭姸鎬佹槸涓嶇浉鍏崇殑錛岄偅涔堜綘浼氶櫡鍏モ滈『搴忊濋櫡闃變箣涓傚鏋滀綘鎴栬呭叾浠栦漢鎯寵鏀瑰彉嫻嬭瘯A錛屾祴璇旴灝嗕細鏆傚仠鑰屼笖浣犱笉鐭ュ畠鏆傚仠鐨勫師鍥犮傚榪欎簺鏁呴殰榪涜鏁呴殰澶勭悊浼氭氮璐瑰緢澶氭椂闂淬?/p> <p>浣跨敤<TestInitialize()> 鍜?lt;TestCleanup()>鏂規硶鏄湰璐ㄤ笂鑳藉鑾峰緱鏇村ソ鐨勬祴璇曢殧紱匯傜‘瀹氫綘鐨勬祴璇曟暟鎹椂鍒繪槸鏈鏂扮殑錛岃屼笖嫻嬭瘯涓嬪璞$殑涔熷叿鏈夋柊鐨勫疄渚嬶紝鑰屼笖鎵鏈夌殑鐘舵佸彲浠ユ彁鍓嶉鐭ワ紝鑰屼笖鏃犺浣犵殑嫻嬭瘯鍦ㄤ換浣曞湴鏂規垨鑰呬換浣曟椂闂磋榪愯錛岃繍琛岀殑鎯呭喌閮芥槸鐩稿悓鐨勩?/p> <p> <b>鍦ㄤ竴涓崟鐙崟鍏冩祴璇曚腑閬垮厤澶氶噸澹版槑</b> </p> <p>鎴戜滑灝嗗0鏄庢晠闅滅湅浣滀竴涓▼搴忓紛鐥呯殑璞″緛涓斿0鏄庤褰撲綔杞歡浣撶殑鎸囩ず鐐規垨鑰呪滆娑叉鏌モ濄備綘鍙互鎵懼埌瓚婂鐨勭棁鐘訛紝紼嬪簭寮婄梾灝辮秺鍙互杞繪澗鐨勮璇婃柇鍜屾帓闄ゆ帀銆傚鏋滀綘鍦ㄤ竴涓祴璇曚腑瀹氫箟浜嗗閲嶅0鏄庯紝鍙湁絎竴涓晠闅滃0鏄庡皢浼氫互鎶涘嚭寮傚父鐨勬柟寮忔樉紺哄嚭鏉ャ傝鍙傝冧笅闈㈡彃鍥句箣涓殑嫻嬭瘯浠g爜錛?/p> <pre class="codeSample"><TestMethod()> _ Public Sub Sum_AnyParamBiggerThan1000IsNotSummed() Assert.AreEqual(3, Sum(1001, 1, 2) Assert.AreEqual(3, Sum(1, 1001, 2) ' Assert fails Assert.AreEqual(3, Sum(1, 2, 1001) ' This line never executes End Sub </pre> <p> <b>浣犲彲鑳芥病鏈夊彂鐜頒互涓婁唬鐮佷箣涓叾浠栧彲鑳界殑寰佸厗銆傚湪涓涓晠闅滀箣鍚庯紝騫跺彂鐨勫0鏄庝笉浼氳鎵ц銆傝繖浜涗笉鑳界敓鏁堢殑澹版槑鍙兘鎻愪緵浜嗘湁浠峰肩殑鏁版嵁錛堟垨鑰呭緛鍏嗭級鍙兘鑳藉甯姪浣犲緢蹇殑闆嗕腑鐨勭劍鐐硅屼笖鍙戠幇娼滃湪鐨勯棶棰樸傚洜姝ゅ湪涓涓嫭绔嬬殑嫻嬭瘯涓繍琛屽閲嶅0鏄庡鍔犱簡鍏鋒湁寰堝皯浠峰煎鏉傛с傚彟澶栵紝澹版槑搴旇琚嫭绔嬬殑榪愯錛屾垜浠簲璇ヨ緗嚜鎴戠嫭绔嬬殑鍗曞厓嫻嬭瘯浠ヤ嬌寰椾綘鍏鋒湁鑳藉寰堝ソ鐨勫彂鐜伴敊璇殑鏈轟細銆?/b> </p> <div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"> <a > <img height="9" alt="榪斿洖欏甸" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /> </a> <a class="topOfPage" > <font color="#002c99">榪斿洖欏甸</font> </a> </div> <a name="EQF"> </a> <h2>鍒涘緩鏄撹鎬ф祴璇?/h2> <p>濡傛灉浣犱互鍓嶅啓榪囧崟鍏冩祴璇曪紝浣犳槸鍚﹀湪鍗曞厓嫻嬭瘯涓婂啓浜嗕竴涓ソ鐨勫0鏄庤錛熷彲璁鎬笉鏄繖鏍風殑錛屽ぇ澶氭暟寮鍙戣呭茍涓嶅帉鐑﹀幓鍐欎竴涓ソ鐨勫0鏄庡洜涓轟粬浠洿鍔犲叧蹇冨幓鍐欐祴璇曘?/p> <p>鍋囪浣犳槸鍥㈤槦涓殑涓涓柊鐨勫紑鍙戣咃紝浣犺瘯鍥捐涓涓崟鍏冩祴璇曘傝繛鎺ヨ繖涓細</p> <pre class="codeSample"><TestMethod()> _ Public Sub TestCalcParseNegative() Dim c As New Calc Assert.AreEqual(1000, c.Parse("-1, -1000") End Sub </pre> <p>浣滀負涓涓畝鍗曠殑緇冧範錛屽鏋滀綘鐞嗚В浜嗕笂渚嬩腑Calc鍒嗗垪鏂規硶鐨勭敤娉曪紝浣犲緢鍙兘鍙互榪涜寰堝ソ鐨勬帹嫻嬶紝浣嗘槸浠栧彲浠ョ畝鍗曠殑浣滀負浜哄憳鏁伴噺鐨勭敤渚嬩嬌寰楄緭鍑虹粨鏋滀負1000:</p> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>鍦ㄧ粍涓繑鍥炴渶澶х殑璐熸暟浣滀負涓涓鏁般?/p> </td> </tr> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>濡傛灉鏁板瓧鏄礋鏁頒笖榪斿洖鍊間負鍓╀笅鍑犱釜鏁扮殑鎬誨拰浣滀負涓涓鏁幫紝閭d箞蹇界暐絎竴涓暟瀛椼?/p> </td> </tr> <tr> <td class="listBullet" valign="top">鈥?/td> <td class="listItem"> <p>榪斿洖鐩鎬簰浣滀箻縐繍綆楄屽緱鐨勬暟瀛椼?/p> </td> </tr> </tbody> </table> <p>鐜板湪璇峰弬鑰冧笅闈㈠湪鍗曞厓嫻嬭瘯涔嬩腑鐨勫皬鏀瑰姩錛?/p> <pre class="codeSample"><TestMethod()> _ Public Sub Parse_NegativeFirstNum_ReturnsSumOfTheRestAsPositive() Dim c As New Calc Dim parsedSumResult As Integer = c.Parse("-1", "-1000") Const SUM_WITH_IGNORED_FIRST_NUM As Integer = 1000 Assert.AreEqual(SUM_WITH_IGNORED_FIRST_NUM, parsedSumResult) End Sub </pre> <p> <b>榪欎釜鏄笉鏄瘮杈冨鏄撶悊瑙e憿錛熷綋澹版槑娑堟伅娑堝け涔嬪悗錛岃〃杈炬剰鍥炬渶鍚堥傜殑鍦版柟灝辨槸嫻嬭瘯鐨勫悕瀛椼?/b> 濡傛灉浣犲箍娉涚殑浣跨敤浜嗗畠錛屼綘灝嗕細鍙戠幇浣犱笉鍐嶉渶瑕佽嫻嬭瘯浠g爜灝辮兘鏄庣櫧浠g爜嫻嬭瘯鐨勭洰鐨勬墍鍦ㄣ備簨瀹炰笂錛屼綘緇忓父鏍規湰涓嶉渶瑕佸啓浠諱綍娉ㄩ噴錛屽洜涓轟唬鐮侊紝鐗瑰埆鏄偅浜涘甫鐫瀹炰緥鐨勶紝浠栦滑鑷繁鏄瘉鏄庤嚜宸辯殑銆?/p> <p>鍚嶅瓧鍖呭惈浜嗕笁閮ㄥ垎鍐呭錛?嫻嬭瘯涓嬫柟娉曠殑鍚嶅瓧錛堣В鏋愶級錛屾祴璇曚笅鐨勭姸鎬佹垨鑰呰鍒欙紙甯︾潃絎竴涓礋鏁頒紶閫掍竴涓瓧絎︿覆錛夛紝浠ュ強棰勬湡鐨勮緭鍑烘垨鑰呰繍琛屾儏鍐碉紙鍓╀綑鏁板瓧鐨勬誨拰浠ヤ竴涓鏁扮殑褰㈠紡榪斿洖錛夈傞渶瑕佹敞鎰忕殑鏄垜浠庡悕縐頒腑灝員est浠ュ強Calc榪欎袱涓瘝鍒犻櫎銆傛垜宸茬粡鐭ラ亾榪欐槸涓涓睘鎬х殑嫻嬭瘯鍥犳鍦ㄦ娌℃湁閲嶅姝や俊鎭殑蹇呰銆傛垜涔熺煡閬撹繖鏄竴涓湪Calc綾諱腑鐨勬祴璇曞洜涓烘祴璇曠被緇忓父鏄啓緇欎竴涓壒孌婄被鐨勶紙榪欎釜綾諱篃璁稿凡緇忚鍛藉悕涓篊alcTests錛夈?/p> <p>鍚嶅瓧涔熻浼氬緢闀匡紝浣嗘槸鍙堟湁璋佸湪涔庡憿錛熷畠璇昏搗鏉ユ洿鍍忔槸涓涓爣鍑嗚嫳璇殑鍙ュ瓙鑰屼笖瀹冧嬌寰椾竴涓柊鏉ョ殑寮鍙戣呮洿瀹規槗鏄庣櫧嫻嬭瘯鐨勫唴瀹廣傛洿鏄繖鏍鳳紝褰撹繖涓祴璇曞彂鐢熸晠闅滄椂錛屾垜浠敋鑷充笉闇瑕佽皟璇曚唬鐮佸氨鍙互鐭ラ亾闂絀剁珶鍑哄湪鍝噷銆?/p> <p>闇瑕佹敞鎰忕殑鏄紝鎴戝凡緇忓湪鍓嶉潰鍒嗗埆瀹為檯婕旂ず浜嗛氳繃鍦ㄤ笉鍚岃涓垱寤轟竴涓粨鏋滃彉閲忕殑鏂規硶浠庡0鏄庢搷浣滀腑榪涜鍒嗚В鎿嶄綔銆傝繖鏍峰仛鑷沖皯鏈変袱涓悊鐢便傜涓涓悊鐢辨槸錛屼綘鍙互涓轟竴涓彉閲忓垎閰嶄竴涓彲璇繪у己鐨勫悕瀛楋紝瀹冨彲浠ュ寘鍚粨鏋滐紝榪欐牱鍙互浣夸綘鐨勫0鏄庤闈炲父鏄撲簬鐞嗚В浠ュ強鏄撲簬璇匯傜浜岀偣鏄紝嫻嬭瘯涓嬩笌瀵硅薄鐩稿弽鐨刬nvocation 鍙兘闈炲父鐨勯暱錛屽畠鍙兘浼氫嬌浣犵殑澹版槑琛屽歡浼稿嚭灞忓箷鐨勮竟緙樹箣澶栵紝榪欐牱瀵艱嚧嫻嬭瘯鑰呭悜鍙蟲粴灞忋傚氨鎴戜釜浜鴻岃█錛屾垜璁や負榪欎釜鏄潪甯告伡浜虹殑銆?/p> <p>鎴戝湪鎴戠殑嫻嬭瘯涓嬌鐢ㄤ簡寰堝甯擱噺浠ョ‘淇濇垜鐨勫0鏄庤璧鋒潵鍍忎竴鏈功銆傚湪鍏堝墠鐨勪緥瀛愪箣涓紝浣犲彲浠ヨ鍒板0鏄庝腑璇達細鈥滅‘淇濆垎瑙f繪暟鏄笌蹇界暐絎竴涓暟鍚庢墍寰楁誨拰鏄浉絳夌殑銆傗?涓轟綘鐨勫彉閲忓彇涓涓緢濂界殑鍚嶅瓧鑳藉鍦ㄦ煇浜涚▼搴︿笂寮ヨˉ瀵逛簬嫻嬭瘯鐨勫懡鍚嶄笉瓚熾?/p> <p> <b>褰撶劧錛屾湁鏃朵竴涓0鏄?/b> 娑堟伅鏄湪涓涓崟鍏冩祴璇曚腑浼犻抜ntent鐨勬渶濂界殑鏂規硶銆?涓涓ソ鐨勫0鏄庢秷鎭緇堣兘澶熻В閲婁粈涔堝洜璇ヤ細鍙戠敓鎴栬呬粈涔堝彂鐢熶簡鑰屼笖涓轟粈涔堜細鍑洪敊銆備婦涓緥瀛愭潵璇達紝鈥滃垎鍒楀簲璇ュ拷鐣ユ帀絎竴涓暟瀛楀鏋滆繖涓暟瀛楁槸涓礋鏁扮殑璇濃濓紝鈥滃垎鍒椾笉鑳藉蹇界暐鎺夌涓涓礋鏁扳濓紝榪樻湁鈥淴璋冪敤瀵硅薄Y鏍囪閿欒鈥濊繖浜涢兘鏄湁鐢ㄧ殑澹版槑娑堟伅錛屽畠浠緢娓呮櫚鐨勬弿榪頒簡緇撴灉鐨勬儏鍐點?/p> <div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"> <a > <img height="9" alt="榪斿洖欏甸" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /> </a> <a class="topOfPage" > <font color="#002c99">榪斿洖欏甸</font> </a> </div> <a name="ELG"> </a> <h2>鍦ㄤ綘鐨勮緗柟娉曚腑閬垮厤閮ㄥ垎鐩稿叧鐨勪唬鐮?/h2> <p>涓涓?lt;TestInitialize()> 鏂規硶鏄牱渚嬫垚鍛樺彉閲忓湪嫻嬭瘯涓嬌鐢ㄧ殑涓涓ソ鍦版柟銆備綘鎵鏈夌殑嫻嬭瘯錛屽彧鏈夊湪涓閮ㄥ垎鐨勬祴璇曚腑閬垮厤鍙橀噺銆備粬浠彲浠ヤ負嫻嬭瘯璁劇疆鏈湴鍙橀噺銆傚鏋滀綘鍒涘緩浜嗛儴鍒嗙浉鍏崇殑瀹炰緥浣滀負綾葷殑鎴愬憳錛岀敤鏉ュ湪嫻嬭瘯涓畝鍗曠殑閬垮厤鍒涘緩鐨勫壇鏈紝浣犲簲璇ヤ嬌鐢ㄥ湪鏂囩珷鍓嶉潰瑙i噴鐨勫伐鍘傛柟娉曪紝浣跨敤閮ㄥ垎鐩稿叧鍙橀噺浣垮緱浣犵殑浠g爜鍜岃緗柟娉曠己灝戞槗璇繪с備竴鏃﹀彉閲忓湪涓涓垨鑰呮瘡涓祴璇曚腑浣跨敤錛岄偅涔堜粬搴旇鏄?lt;TestInitialize()> 鏂規硶鐨勪竴涓垚鍛樺拰鍙橀噺銆?/p> <p> <a target="_blank"> <b> <font color="#002c99">Figure聽5</font> </b> </a> 灞曠幇浜嗕竴涓嫢鏈変袱涓垚鍛樺彉閲忕殑綾葷殑嫻嬭瘯銆備絾鏄粬浠腑鐨勪竴涓?cxNum)鍙閮ㄥ垎浣跨敤銆?a target="_blank"><b><font color="#002c99">Figure聽6</font></b></a> 灞曠幇浜嗗浣曞湪嫻嬭瘯涓浛鎹唬鐮佷粠鑰屼嬌瀹冩洿鍔犳槗璇葷殑鏂規硶銆?/p> <div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px"> <a > <img height="9" alt="榪斿洖欏甸" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /> </a> <a class="topOfPage" > <font color="#002c99">榪斿洖欏甸</font> </a> </div> <a name="E2G"> </a> <h2>鎬葷粨</h2> <p>灝卞儚浣犳墍鐪嬪埌鐨勶紝鍐欏崟鍏冩祴璇曞茍涓嶆槸涓涓井涓嶈凍閬撶殑浠誨姟錛屽鏋滄楠ゆ紜紝鍗曞厓嫻嬭瘯鍙互涓哄紑鍙戣呯殑鐢熶駭鍔涘拰浠g爜鐨勮川閲忓甫鏉ヤ護浜烘儕璁剁殑鎻愰珮錛屼粬鍙互甯姪浣犲幓鍒涘緩鐨勫簲鐢ㄧ▼搴忓惈鏈夋洿灝戠殑閿欒錛屽悓鏃朵篃鍙互渚夸簬鍏朵粬鐨勫紑鍙戣呭幓媧炲療浣犵殑浠g爜錛屼絾鏄粬涔熼渶瑕佸湪涔嬪墠鎵挎媴涓涓箟鍔★紝紜閬靛驚涓浜涚畝鍗曠殑瑙勫垯銆傚綋鏂規硶騫朵笉鏄緢濂芥椂錛屽崟鍏冩祴璇曞垯鍙兘杈懼埌涓涓浉鍙嶇殑緇撴灉錛屼粠鑰屾氮璐規偍鐨勬椂闂達紝騫朵笖浣挎祴璇曡繃紼嬫洿鍔犲鏉傘?/p> <p> <b>Roy Osherove</b> Agile緇勭殑璐熻矗浜? 榪欎釜欏鵑棶鍏徃鑷村姏浜巃gile software development 鍜?.NET architecture鐨勭爺絀跺伐浣? Roy鍚屾椂緇存姢浜嗕竴涓猙log鍦?a target="_blank"><font color="#002c99"> www.iserializable.com</font></a>涓婃湁鐩稿叧鐨勪俊鎭? 浣犲彲浠ラ氳繃Email鑱旂郴浠栵細 <em>Roy@TeamAgile.com</em>.</p> <p> <a target="_blank"> <font color="#002c99">杞埌鑻辨枃欏甸潰</font> </a> </p> <img src ="http://www.shnenglu.com/mzty/aggbug/8628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mzty/" target="_blank">姊﹀湪澶╂動</a> 2006-06-16 11:53 <a href="http://www.shnenglu.com/mzty/archive/2006/06/16/8628.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浣跨敤 Visual Studio 2005 Team System 榪涜鍗曞厓嫻嬭瘯http://www.shnenglu.com/mzty/archive/2006/06/16/8626.html姊﹀湪澶╂動姊﹀湪澶╂動Fri, 16 Jun 2006 03:50:00 GMThttp://www.shnenglu.com/mzty/archive/2006/06/16/8626.htmlhttp://www.shnenglu.com/mzty/comments/8626.htmlhttp://www.shnenglu.com/mzty/archive/2006/06/16/8626.html#Feedback1http://www.shnenglu.com/mzty/comments/commentRss/8626.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/8626.html闃呰鍏ㄦ枃

]]>
浣跨敤 Visual Studio Team Test 榪涜鍗曞厓嫻嬭瘯http://www.shnenglu.com/mzty/archive/2006/06/16/8624.html姊﹀湪澶╂動姊﹀湪澶╂動Fri, 16 Jun 2006 03:46:00 GMThttp://www.shnenglu.com/mzty/archive/2006/06/16/8624.htmlhttp://www.shnenglu.com/mzty/comments/8624.htmlhttp://www.shnenglu.com/mzty/archive/2006/06/16/8624.html#Feedback1http://www.shnenglu.com/mzty/comments/commentRss/8624.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/8624.html婕旂粌錛氫嬌鐢?Visual Studio Team Test 榪涜鍗曞厓嫻嬭瘯

鍙戝竷鏃ユ湡錛?5/24/2005 | 鏇存柊鏃ユ湡錛?5/24/2005

Mark Michaelis
Itron Corporation

鎽樿錛?/b>鏈紨緇冮氳繃嫻嬭瘯椹卞姩寮鍙?(TDD) 鍜屽厛嫻嬭瘯-鍚庣紪鐮?(test-then-code) 鐨勬柟娉曞涔犲崟鍏冩祴璇曘?/p>

*
鏈〉鍐呭
綆浠? hspace= 綆浠?/a>
寮濮? hspace= 寮濮?/a>
鍒涘緩嫻嬭瘯 鍒涘緩嫻嬭瘯
榪愯嫻嬭瘯 榪愯嫻嬭瘯
媯鏌ュ紓甯? hspace= 媯鏌ュ紓甯?/a>
浠庢暟鎹簱涓姞杞芥祴璇曟暟鎹? hspace= 浠庢暟鎹簱涓姞杞芥祴璇曟暟鎹?/a>
嫻嬭瘯瑙嗗浘 (Test View) 紿楀彛 嫻嬭瘯瑙嗗浘 (Test View) 紿楀彛
澧炲姞涓涓祴璇曟暟鎹簱 澧炲姞涓涓祴璇曟暟鎹簱
灝嗘暟鎹笌嫻嬭瘯鍏寵仈 灝嗘暟鎹笌嫻嬭瘯鍏寵仈
瀹炵幇鍜岄噸鏋勭洰鏍囨柟娉? hspace= 瀹炵幇鍜岄噸鏋勭洰鏍囨柟娉?/a>
浠g爜瑕嗙洊 浠g爜瑕嗙洊
鍒濆鍖栧拰娓呴櫎嫻嬭瘯 鍒濆鍖栧拰娓呴櫎嫻嬭瘯
鏈浣沖疄璺? hspace= 鏈浣沖疄璺?/a>
灝忕粨 灝忕粨

綆浠?/h2>

鏈鏂板彂甯冪殑 Visual Studio Test System (VSTS) 鍖呭惈浜嗕竴濂楃敤浜?Visual Studio Team Test 鐨勫畬鏁村姛鑳姐俆eam Test 鏄?Visual Studio 闆嗘垚鐨勫崟鍏冩祴璇曟鏋訛紝瀹冩敮鎸侊細

鈥?/td>

嫻嬭瘯鏂規硶瀛樻牴 (stub) 鐨勪唬鐮佺敓鎴愩?/p>

鈥?/td>

鍦?IDE 涓繍琛屾祴璇曘?/p>

鈥?/td>

鍚堝茍浠庢暟鎹簱涓姞杞界殑嫻嬭瘯鏁版嵁銆?/p>

鈥?/td>

嫻嬭瘯榪愯瀹屾垚鍚庯紝榪涜浠g爜瑕嗙洊鍒嗘瀽銆?

鍙﹀錛孴eam Test 鍖呭惈浜嗕竴濂楁祴璇曞姛鑳斤紝鍙互鍚屾椂鏀寔寮鍙戜漢鍛樺拰嫻嬭瘯浜哄憳銆?/p>

鍦ㄦ湰鏂囦腑錛屾垜浠噯澶囨紨緇冨浣曞垱寤篢eam Test 鐨勫崟鍏冩祴璇曘傛垜浠粠涓涓畝鍗曠殑紺轟緥紼嬪簭闆嗗紑濮嬶紝鐒跺悗鍦ㄨ紼嬪簭闆嗕腑鐢熸垚鍗曞厓嫻嬭瘯鏂規硶瀛樻牴銆傝繖鏍峰彲浠ヤ負Team Test 鍜屽崟鍏冩祴璇曠殑鏂版墜璇昏呮彁渚涘熀鏈殑璇硶鍜屼唬鐮侊紝鍚屾椂涔熷緢濂藉湴浠嬬粛浜嗗浣曞揩閫熷緩绔嬫祴璇曢」鐩殑緇撴瀯銆傜劧鍚庯紝鎴戜滑杞埌浣跨敤嫻嬭瘯椹卞姩寮鍙?(test driven development, TDD) 鏂規硶錛屽嵆鍦ㄥ啓浜у搧浠g爜鍓嶅厛鍐欏崟鍏冩祴璇曘?/p>

Team Test鐨勪竴涓叧閿壒鐐規槸浠庢暟鎹簱涓姞杞芥祴璇曟暟鎹紝鐒跺悗灝嗗叾鐢ㄤ簬嫻嬭瘯鏂規硶銆傚湪婕旂ず鍩烘湰鐨勫崟鍏冩祴璇曞悗錛屾垜浠弿榪板浣曞垱寤烘祴璇曟暟鎹茍闆嗘垚鍒版祴璇曚腑銆?/p>

鏈枃涓嬌鐢ㄧ殑紺轟緥欏圭洰鍖呭惈涓涓?LongonInfo 綾伙紝瀹冨皝瑁呬簡涓庣櫥褰曠浉鍏崇殑鏁版嵁錛堜緥濡傜敤鎴峰悕鍜屽瘑鐮侊級浠ュ強涓浜涘叧浜庢暟鎹殑綆鍗曠殑楠岃瘉瑙勫垯銆傛渶緇堢殑綾誨涓嬪浘 1 鎵紺恒?/p>


鍥?/b> 1. 鏈緇堢殑 LogonInfo 綾?/b>

璇鋒敞鎰忔墍鏈夌殑嫻嬭瘯浠g爜浣嶄簬涓涓崟鐙殑欏圭洰銆傝繖鏄湁閬撶悊鐨勶紝浜у搧浠g爜搴旇灝藉彲鑳藉皯鐨勫彈嫻嬭瘯浠g爜褰卞搷錛屾墍浠ユ垜浠笉鎯沖湪浜у搧浠g爜鐨勭▼搴忛泦涓祵鍏ユ祴璇曚唬鐮併?/p>

寮濮?/h2>

棣栧厛錛屾垜浠垱寤轟竴涓悕涓衡淰STSDemo鈥濈殑綾誨簱欏圭洰銆傞粯璁ゆ儏鍐典笅錛?b>涓烘柟妗堝垱寤虹洰褰?/b>(Create directory for solution) 澶嶉夋琚変腑銆備繚鐣欐閫夐」鍙互浣挎垜浠湪 VSTSDemo 欏圭洰鐨勫悓涓灞傜洰褰曞垱寤烘祴璇曢」鐩傜浉鍙嶏紝濡傛灉涓嶉変腑姝ら夐」錛孷isual Studio 2005 浼氬皢嫻嬭瘯欏圭洰鏀懼湪 VSTSDemo 欏圭洰鐨勫瓙鐩綍涓傛祴璇曢」鐩伒寰?Visual Studio 鍦ㄨВ鍐蟲柟妗堟枃浠惰礬寰勭殑瀛愮洰褰曚腑鍒涘緩棰濆欏圭洰鐨勮瀹氥?/p>

鍒涘緩鍒濆鐨?VSTSDemo 欏圭洰鍚庯紝鎴戜滑浣跨敤 Visual Studio 鐨勮В鍐蟲柟妗堣祫婧愮鐞嗗櫒灝?Class1.cs 鏂囦歡閲嶅懡鍚嶄負 LogonInfo.cs錛岃繖鏍風被鍚嶄篃浼氳鏇存柊涓?LogonInfo銆傜劧鍚庢垜浠慨鏀規瀯閫犲嚱鏁頒互鎺ュ彈涓や釜瀛楃涓插弬鏁幫細userId 鍜?password銆備竴鏃︽瀯閫犲嚱鏁扮殑絳懼悕琚0鏄庯紝鎴戜滑灝卞彲浠ヤ負鏋勯犲嚱鏁扮敓鎴愭祴璇曘?/p>


鍥?/b> 2. LongonInfo 鏋勯犲嚱鏁扮殑涓婁笅鏂囪彍鍗曠殑鈥滃垱寤烘祴璇?/b> 鈥?/b> 鈥?/b> ( Create Tests... ) 鑿滃崟欏?/b>

鍒涘緩嫻嬭瘯

鍦ㄥ紑濮嬬紪鍐?LogonInfo鐨勪換浣曞疄鐜頒箣鍓嶏紝鎴戜滑閬靛驚 TDD 瀹炶返鐨勮鍒欙紝棣栧厛緙栧啓嫻嬭瘯銆俆DD 鍦═eam Test 涓茍涓嶆槸蹇呴渶鐨勶紝浣嗘渶濂藉湪鏈枃鐨勫墿浣欓儴鍒嗛伒寰?TDD銆傚彸閿崟鍑?LogonInfo()鏋勯犲嚱鏁幫紝鐒跺悗閫夋嫨鈥滃垱寤烘祴璇曗︹濊彍鍗曢」(濡傚浘 2 鎵紺?銆傝繖鏍蜂細鍑虹幇涓涓璇濇錛屽彲浠ュ湪涓嶅悓鐨勯」鐩腑鐢熸垚鍗曞厓嫻嬭瘯錛堝鍥?3 鎵紺猴級銆傞粯璁ゆ儏鍐典笅錛岄」鐩緗殑杈撳嚭 (Output) 閫夐」鏄竴涓柊鐨?Visual Basic 欏圭洰錛屼絾鏄篃鍙互閫夋嫨 C# 鍜?C++ 嫻嬭瘯欏圭洰銆傚湪鏈枃涓紝鎴戜滑閫夋嫨 Visual C#錛岀劧鍚庡崟鍑?OK 鎸夐挳錛屾帴鐫杈撳叆欏圭洰鍚?VSTSDemo.Test銆傛祴璇曢」鐩悕縐般?/p>


鍥?/b> 3. 鐢熸垚鍗曞厓嫻嬭瘯瀵硅瘽妗?/b>

鐢熸垚鐨勬祴璇曢」鐩寘鍚洓涓笌嫻嬭瘯鐩稿叧鐨勬枃浠躲?/p>
鏂囦歡鍚?/td> 鐩殑

AuthoringTest.txt

鎻愪緵鍏充簬鍒涘緩嫻嬭瘯鐨勮鏄庯紝鍖呮嫭鍚戦」鐩鍔犲叾浠栨祴璇曠殑璇存槑銆?/p>

LogonInfoTest.cs

鍖呭惈浜嗙敤浜庢祴璇?LogonInfo()鐨勭敓鎴愭祴璇曪紝浠ュ強嫻嬭瘯鍒濆鍖栧拰嫻嬭瘯娓呴櫎鐨勬柟娉曘?/p>

ManualTest1.mht

鎻愪緵浜嗕竴涓ā鏉匡紝鍙互濉叆鎵嬪伐嫻嬭瘯鐨勬寚浠ゃ?/p>

UnitTest1.cs

涓涓┖鐨勫崟鍏冩祴璇曠被鏋舵瀯錛岀敤浜庢斁鍏ュ彟澶栫殑鍗曞厓嫻嬭瘯銆?/p>

鍥犱負鎴戜滑涓嶆墦綆楀璇ラ」鐩繘琛屾墜宸ユ祴璇曪紝騫朵笖鐢變簬宸茬粡鏈変簡涓涓崟鍏冩祴璇曟枃浠訛紝鎴戜滑灝嗗垹闄?ManualTest1.mht 鍜?UnitTest1.cs銆?/p>

闄や簡涓浜涢粯璁ょ殑鏂囦歡錛岀敓鎴愮殑嫻嬭瘯欏圭洰榪樺寘鍚簡瀵?Microsoft.VisualStudio.QualityTools.UnitTestFramework鍜?VSTSDemo 欏圭洰鐨勫紩鐢ㄣ傚墠鑰呮槸嫻嬭瘯寮曟搸榪愯鍗曞厓嫻嬭瘯闇瑕佷緷璧栫殑嫻嬭瘯妗嗘灦紼嬪簭闆嗭紝鍚庤呮槸瀵規垜浠渶瑕佹祴璇曠殑鐩爣紼嬪簭闆嗙殑欏圭洰寮曠敤銆?/p>

榛樿鎯呭喌涓嬶紝鐢熸垚鐨勬祴璇曟柟娉曟槸鍖呭惈浠ヤ笅瀹炵幇鐨勫崰浣嶇錛?/p>

娓呭崟 1. 鐢熸垚鐨勬祴璇曟柟娉曪細 ConstructorTest(), 浣嶄簬 VSTSDemo.Test.LogonInfoTest

   
/// <summary>
   ///This is a test class for VSTTDemo.LogonInfo and is intended
   ///to contain all VSTTDemo.LogonInfo Unit Tests
   ///</summary>
   [TestClass()]
   public class LogonInfoTest
   {
      // ...

      /// <summary>
      ///A test case for LogonInfo (string, string)
      ///</summary>
      [TestMethod()]
      public void ConstructorTest()
      {
         string userId = null; // TODO: Initialize to an appropriate value

         string password = null; // TODO: Initialize to an appropriate value

         LogonInfo target = new LogonInfo(userId, password);

         // TODO: Implement code to verify target
         Assert.Inconclusive(
            "TODO: Implement code to verify target");
      }
}

紜垏鐨勭敓鎴愪唬鐮佷細鏍規嵁嫻嬭瘯鐩爣鐨勬柟娉曠被鍨嬪拰絳懼悕涓嶅悓鑰屾湁鎵涓嶅悓銆備緥濡傦紝鍚戝浼氫負縐佹湁鎴愬憳鍑芥暟鐨勬祴璇曠敓鎴愬弽灝勪唬鐮併傚湪榪欑鐗瑰埆鐨勬儏鍐典笅錛屾垜浠渶瑕佷笓闂ㄧ敤浜庡叕鏈夋瀯閫犲嚱鏁版祴璇曠殑浠g爜銆?/p>

鍏充簬Team Test 錛屾湁涓や釜閲嶈鐨勭壒鎬с傞鍏堬紝浣滀負嫻嬭瘯鐨勬柟娉曠敱 TestMethodAttribute灞炴ф寚瀹氾紝鍙﹀錛屽寘鍚祴璇曟柟娉曠殑綾繪湁 TestClassAttribute灞炴с傝繖浜涘睘鎬ч兘鍙互鍦?Microsoft.VisualStudio.QualityTools.UnitTesting.Framework 鍛藉悕絀洪棿涓壘鍒般俆eam Test 浣跨敤鍙嶅皠鏈哄埗鍦ㄦ祴璇曠▼搴忛泦涓悳绱㈡墍鏈夌敱 TestClass淇グ鐨勭被錛岀劧鍚庢煡鎵劇敱 TestMethodAttribute淇グ鐨勬柟娉曟潵鍐沖畾鎵ц鐨勫唴瀹廣傚彟澶栦竴涓噸瑕佺殑鐢辨墽琛屽紩鎿庤屼笉鏄紪璇戝櫒楠岃瘉鐨勬爣鍑嗘槸錛屾祴璇曟柟娉曠殑絳懼悕蹇呴』鏄棤鍙傛暟鐨勫疄渚嬫柟娉曘傚洜涓哄弽灝勬悳绱?TestMethodAttribute錛屾墍浠ユ祴璇曟柟娉曞彲浠ヤ嬌鐢ㄤ換鎰忕殑鍚嶅瓧銆?/p>

嫻嬭瘯鏂規硶 ConstructorTest()棣栧厛瀹炰緥鍖栫洰鏍?LongonInfo 綾伙紝鐒跺悗鏂█嫻嬭瘯鏄潪鍐沖畾鎬х殑(浣跨敤Assert.Inconclusive())銆傚綋嫻嬭瘯榪愯鏃訛紝Assert.Inconclusive()璇存槑浜嗗畠鍙兘緙哄皯姝g‘鐨勫疄鐜般傚湪鎴戜滑鐨勭ず渚嬩腑錛屾垜浠洿鏂?ConstructorTest()鏂規硶錛岃瀹冩鏌ョ敤鎴峰悕鍜屽瘑鐮佺殑鍒濆鍖栵紝濡備笅鎵紺恒?/p>

娓呭崟 2. 鏇存柊鐨?/b> ConstructorTest() 瀹炵幇

      
/// <summary>
      ///A test case for LogonInfo (string, string)
      ///</summary>
      [TestMethod()]
      public void ConstructorTest()
      {
         string userId = "IMontoya";

         string password = "P@ssw0rd";

         LogonInfo logonInfo = new LogonInfo(userId, password);

         Assert.AreEqual<string>(userId, logonInfo.UserId,
            "The UserId was not correctly initialized.");
         Assert.AreEqual<string>(password, logonInfo.Password,
            "The Password was not correctly initialized.");
      }

璇鋒敞鎰忔垜浠殑媯鏌ヤ嬌鐢?Assert.AreEqual<T>() 鏂規硶瀹屾垚銆?b>Assert鏂規硶涔熸敮鎸佹病鏈夋硾鍨嬬殑 AreEqual()錛屼絾鏄硾鍨嬬増鏈嚑涔庢繪槸棣栭夛紝鍥犱負瀹冧細鍦ㄧ紪璇戞椂楠岃瘉綾誨瀷鍖歸厤 錛?鍦?CLR 鏀寔娉涘瀷鍓嶏紝榪欑閿欒鍦ㄥ崟鍏冩祴璇曟鏋朵腑闈炲父鏅亶銆?/p>

鍥犱負 UserID 鍜?Password 鐨勫疄渚嬪煙榪樻病鏈夊垱寤猴紝鎴戜滑闇瑕佸洖澶村皢鍏舵坊鍔犲埌 LogonInfo綾諱腑錛屼互渚縑STTDemo.Test 欏圭洰鍙互緙栬瘧銆?/p>

鍗充嬌鎴戜滑榪樻病鏈変竴涓湁鏁堢殑瀹炵幇錛岃鎴戜滑寮濮嬭繍琛屾祴璇曘傚鏋滄垜浠伒寰?TDD 鏂規硶錛屾垜浠氨搴旇鐩村埌嫻嬭瘯璇佹槑鎴戜滑闇瑕佽繖鏍風殑浠g爜鏃舵墠鍘葷紪鍐欎駭鍝佷唬鐮併傛垜浠粎鍦ㄥ緩绔嬮」鐩粨鏋勬椂榪濊儗姝ゅ師鍒欙紝浣嗘槸涓鏃﹂」鐩緩绔嬪悗錛屽氨鍙互瀹規槗鍦板緇堥伒寰?TDD 鏂規硶銆?/p>

榪愯嫻嬭瘯

瑕佽繍琛岄」鐩腑鐨勬墍鏈夋祴璇曪紝鍙渶瑕佽繍琛屾祴璇曢」鐩傝瀹炵幇榪欎竴鐐癸紝鎴戜滑闇瑕佸彸閿崟鍑昏В鍐蟲柟妗堣祫婧愮鐞嗗櫒鐨刅STSDemo.Test 欏圭洰錛岄夋嫨璁劇疆涓哄惎鍔ㄩ」鐩?/b>(Set as StartUp Project)銆傛帴鐫錛屼嬌鐢ㄨ彍鍗曢」璋冭瘯->鍚姩(F5) 鎴栬?b>璋冭瘯->寮濮嬫墽琛岋紙涓嶈皟璇曪級(Ctrl+F5) 寮濮嬭繍琛屾祴璇曘?/p>

榪欐椂鍑虹幇嫻嬭瘯緇撴灉紿楀彛錛屽垪鍑洪」鐩腑鐨勬墍鏈夋祴璇曘傚洜涓烘垜浠殑欏圭洰鍙寘鍚竴涓祴璇曪紝鍥犳鍙垪鍑轟簡涓涓祴璇曘傚紑濮嬬殑鏃跺欙紝嫻嬭瘯浼氬浜庢寕璧風殑鐘舵侊紝浣嗘槸涓鏃︽祴璇曞畬鎴愶紝緇撴灉灝嗘槸鎴戜滑鎰忔枡涓殑澶辮觸錛堝鍥?4 鎵紺猴級銆?/p>


鍥?/b> 4. 鎵ц鎵鏈夋祴璇曞悗鐨勬祴璇曠粨鏋滅獥鍙?/b>

鍥?4 鏄劇ず浜?b>嫻嬭瘯緇撴灉 (Test Results) 紿楀彛銆傝繖涓壒鍒殑灞忓箷蹇収闄や簡榛樿鐨勫垪澶栵紝榪樻樉紺轟簡閿欒淇℃伅銆傛偍鍙互鍦ㄥ垪澶翠笂鍗曞嚮鍙抽敭騫墮夋嫨鑿滃崟欏?b>澧炲姞/鍒犻櫎鍒椻?/b>浠ュ鍔犳垨鑰呭垹闄ゅ垪銆?/p>

濡傛灉瑕佹煡鐪嬫祴璇曠殑棰濆緇嗚妭錛屾垜浠彲浠ラ夊畾嫻嬭瘯騫跺弻鍑伙紝鎵撳紑鈥淐onstructorTest[Results]鈥濈獥鍙o紝濡傚浘 5 鎵紺恒?/p>


鍥?/b> 5. 璇︾粏鐨勬祴璇?/b> ConstructorTest [ Results ] 紿楀彛

鍙﹀錛屾垜浠彲浠ュ彸閿崟鍑誨崟涓祴璇曪紝鐒跺悗閫夋嫨鎵撳紑嫻嬭瘯(Open Test) 鑿滃崟欏癸紝榪涘叆嫻嬭瘯浠g爜銆傚洜涓烘垜浠凡緇忕煡閬撻棶棰樺湪浜?LogonInfo 鏋勯犲嚱鏁扮殑瀹炵幇錛屾垜浠彲浠ュ幓閭i噷緙栧啓鍒濆鍖?UserID 鍜?Password 瀛楁鐨勪唬鐮侊紝浣跨敤浼犲叆鐨勫弬鏁板瀹冧滑榪涜鍒濆鍖栥傞噸鏂拌繍琛屾祴璇曚互楠岃瘉嫻嬭瘯鐜板湪鍙互閫氳繃銆?/p>

媯鏌ュ紓甯?/h2>

涓嬩竴姝ユ槸鍒涘緩 LongonInfo 綾伙紝浠ユ彁渚涘 UserID 鍜?password 鐨勪竴浜涢獙璇併備笉騫哥殑鏄紝UserID鍜?Password 瀛楁鏄叕鍏辯殑錛岃繖鎰忓懗鐫瀹冧滑娌℃湁鎻愪緵浠諱綍灝佽鏉ョ‘淇濆畠浠湁鏁堛備絾鏄湪鎴戜滑灝嗗叾杞崲涓哄睘鎬у茍鎻愪緵楠岃瘉鍓嶏紝璁╂垜浠紪鍐欎竴浜涙祴璇曟潵楠岃瘉浠諱綍瀹炵幇鐨勭粨鏋滈兘鏄紜殑銆?/p>

鎴戜滑棣栧厛鏉ョ紪鍐欎竴涓祴璇曪紝闃叉絀哄?(null) 鎴栫┖瀛楃涓茶祴鍊肩粰 UserID銆傞鏈熺粨鏋滄槸錛屽鏋滅┖鍊間紶閫佺粰鏋勯犲嚱鏁幫紝浼氬紩鍙戜竴涓?ArgumentException寮傚父銆傛祴璇曚唬鐮佸娓呭崟 3 鎵紺恒?/p>

娓呭崟 3. 浣跨敤 ExpectedExceptionAttribute 瀵瑰紓甯告儏鍐佃繘琛屾祴璇?/b>

      
[TestMethod]
      [ExpectedException(typeof(ArgumentException),
         "A userId of null was inappropriately allowed.")]
      public void NullUserIdInConstructor()
      {
         LogonInfo logonInfo = new LogonInfo(null, "P@ss0word");
      }

      [TestMethod]
      [ExpectedException(typeof(ArgumentException),
         "A empty userId was inappropriately allowed.")]
      public void EmptyUserIdInConstructor()
      {
         LogonInfo logonInfo = new LogonInfo("", "P@ss0word");
      }

璇鋒敞鎰忓浜?ArgumentException娌℃湁 try-catch 浠g爜鍧楃殑鏄懼紡嫻嬭瘯銆備笉榪囷紝涓や釜嫻嬭瘯閮藉寘鍚彟澶栦竴涓睘鎬?ExpectedException錛屽畠鎺ュ彈涓涓被鍨嬪弬鏁幫紝浠ュ強涓涓彲閫夌殑閿欒淇℃伅錛岀敤浜庡湪娌℃湁寮曞彂寮傚父鏃舵樉紺恒傚綋榪欎釜鍗曞厓嫻嬭瘯鎵ц鏃訛紝嫻嬭瘯妗嗘灦浼氭樉寮忓湴鐩戣寮曞彂鐨?ArgumentException寮傚父錛屽鏋滄柟娉曟病鏈夊紩鍙戣繖涓紓甯革紝嫻嬭瘯灝嗗け璐ャ傝繍琛岃繖浜涙祴璇曚細璇佹槑鎴戜滑榪樻病鏈夊 UserID 鍋氫換浣曢獙璇佹鏌ワ紱鍥犳錛屾祴璇曚細澶辮觸錛屽洜涓烘病鏈夊紩鍙戦鏈熺殑寮傚父銆?/p>

鏈変簡澶辮觸鐨勬祴璇曪紝鐜板湪鍙互鍥炲埌浜у搧浠g爜榪涜鏇存柊鏉ユ彁渚涙祴璇曢渶瑕佹鏌ョ殑鍔熻兘銆傚湪榪欎釜渚嬪瓙涓紝鎴戜滑灝?UserID瀛楁杞崲涓哄睘鎬э紝騫舵彁渚涢獙璇佹鏌ワ紙娓呭崟 4錛夈?/p>

娓呭崟 4. 鍦?/b> LogonInfo 綾諱腑楠岃瘉 UserId

   
public class LogonInfo
   {
      public LogonInfo(string userId, string password)
      {
         this.UserId = userId;
         this.Password = password;
      }

      private string _UserId;
      public string UserId
      {
         get { return _UserId; }
         private set
         {
            if (value == null || value.Trim() == string.Empty)
            {
               throw new ArgumentException(
                  "Parameter userId may not be null or blank.");
            }
            _UserId = value;
         }
      }
      
      // ...
}

灞炴х殑瀹炵幇浣跨敤浜?C# 2.0 鐨勫姛鑳斤紝鍏朵腑 getter 鍜?setter 鐨勮闂潈闄愪笉涓鑷淬俿etter鐨勫疄鐜版爣璇嗕負縐佹湁錛岃?getter 瀹炵幇涓哄叕鏈夈傝繖鏍?UserID 灝變笉鑳藉湪 LogonInfo 綾誨琚慨鏀逛簡錛堥櫎闈為氳繃鍙嶅皠鏈哄埗錛夈?/p>

涓鏃﹀鍔犱簡楠岃瘉錛屾垜浠彲浠ラ噸鏂拌繍琛屾祴璇曟潵楠岃瘉瀹炵幇鏄紜殑銆傛垜浠繍琛屾墍鏈夌殑涓変釜嫻嬭瘯鏉ラ獙璇?UserID 瀛楁杞崲涓哄睘鎬х殑閲嶆瀯榪囩▼娌℃湁浜х敓浠諱綍鎰忓鐨勯敊璇傚崟鍏冩祴璇曠殑鐪熸浠峰煎湪浠g爜淇敼鐨勬椂鍊欐墠鐪熸鏈夋墍浣撶幇銆備竴濂楀崟鍏冩祴璇曞彲浠ヤ繚璇佹垜浠湪緇存姢鍜屾敼榪涗唬鐮佺殑鏃跺欐病鏈夌牬鍧忎唬鐮併?/p>

浠庢暟鎹簱涓姞杞芥祴璇曟暟鎹?/h2>

瀵逛簬 LogonInfo 綾葷殑涓嬩竴嬈′慨鏀癸紝鎴戜滑灝嗘彁渚涗竴涓柟娉曟潵鏀瑰彉瀵嗙爜銆傝鏂規硶鎺ュ彈鏃у瘑鐮佸拰鏂板瘑鐮佷綔涓哄弬鏁般傚彟澶栵紝鎴戜滑浼氶獙璇佸瘑鐮佺鍚堟煇縐嶅鏉傛ч渶姹傘傜‘鍒囩殑璇達紝鎴戜滑灝嗕繚璇佸瘑鐮佺鍚?Windows Active Directory 鐨勯粯璁ら渶姹傦紝鍗沖寘鍚互涓嬪洓縐嶇被鍨嬪瓧絎︿腑鐨勪笁縐嶏細

鈥?/td>

澶у啓瀛楁瘝

鈥?/td>

灝忓啓瀛楁瘝

鈥?/td>

鏍囩偣絎﹀彿

鈥?/td>

鏁板瓧

鍙﹀錛屾垜浠皢媯鏌ュ瘑鐮佹渶灝戝寘鍚?6 涓瓧絎︼紝鏈澶氬寘鍚?255 涓瓧絎︺?/p>

鍜屼箣鍓嶄竴鏍鳳紝鎴戜滑鍦ㄧ紪鍐欏疄鐜板墠鍏堜負瀵嗙爜澶嶆潅鎬ч渶姹傜紪鍐欐祴璇曘備絾鏄樉鐒訛紝鎴戜滑闇瑕佹彁渚涗竴涓祴璇曞肩殑澶ч泦鍚堢敤浜庨獙璇佸疄鐜般傛垜浠笉鏄負姣忎釜嫻嬭瘯鐢ㄤ緥鍒涘緩涓涓崟鐙殑嫻嬭瘯錛屼篃涓嶆槸鍒涘緩涓涓驚鐜潵璋冪敤涓緋誨垪鐨勬祴璇曠敤渚嬶紝鎴戜滑灝嗗垱寤轟竴涓暟鎹┍鍔ㄦ祴璇曪紝瀹冧粠鏁版嵁搴撲腑鍙栧嚭鎵闇鐨勬暟鎹?/p>

嫻嬭瘯瑙嗗浘 (Test View) 紿楀彛

棣栧厛鎴戜滑瀹氫箟涓涓悕涓?ChangePasswordTest() 鐨勬柊嫻嬭瘯銆傚畾涔夊悗錛屼粠鑿滃崟欏?b>嫻嬭瘯->鏌ョ湅鍜屽垱寤烘祴璇?/b>(Test->View and Author Tests)涓烘祴璇曟柟娉曟墦寮嫻嬭瘯瑙嗗浘紿楀彛錛屽鍥?6 鎵紺猴細


鍥?/b> 6. 嫻嬭瘯瑙嗗浘 ( Test view ) 紿楀彛

嫻嬭瘯瑙嗗浘紿楀彛鍙敤鏉ヨ繍琛屾寚瀹氱殑嫻嬭瘯鍜屾祻瑙堟祴璇曠殑鐗瑰畾灞炴с傞氳繃澧炲姞棰濆鐨勫垪錛堝彸閿崟鍑誨垪澶村茍閫夋嫨娣誨姞/鍒犻櫎鍒椻︼級錛屾垜浠彲浠ユ帓搴忓茍鏍規嵁鍋忓ソ鏌ョ湅嫻嬭瘯銆傛湁浜涘垪鏉ヨ嚜淇グ嫻嬭瘯鐨勫睘鎬с備緥濡傦紝娣誨姞 OwnerAttribute灝嗗湪鎵鏈夎呭垪鏄劇ず嫻嬭瘯鐨勬墍鏈夎呫傚叾瀹冨厓鏁版嵁灞炴э紙濡?DescriptionAttribute錛?/b>涔熷彲浠ヤ嬌鐢ㄣ傝繖浜涘睘鎬ч兘鍙互鍦?Microsoft.VisualStudio.QualityTools.UnitTesting.Framework 鍛藉悕絀洪棿涓壘鍒般傚鏋滄病鏈夋樉寮忕殑灞炴у瓨鍦紝閭d箞鎴戜滑鍙互浣跨敤鑷敱褰㈠紡鐨?TestPropertyAttribute鏉ヤ負鐗瑰埆鐨勬祴璇曟柟娉曞鍔犲悕錛嶅煎銆?/p>

娌℃湁瀵瑰簲鍒楃殑灞炴у彲浠ュ湪涓涓祴璇曠殑灞炴х獥鍙d腑鏄劇ず錛堥夋嫨涓涓祴璇曪紝鍦ㄥ彸閿笂涓嬫枃鑿滃崟涓崟鍑?b>灞炴?/b>錛夈傚畠鍖呭惈浜嗘寚瀹氭暟鎹繛鎺ュ瓧絎︿覆鍜岀敤浜庤澆鍏ユ祴璇曟暟鎹殑琛ㄥ悕鐨勫睘鎬с傛樉鐒訛紝涓轟簡鎸囧畾鏈夋晥鍊鹼紝鎴戜滑闇瑕佷竴涓暟鎹簱榪炴帴銆?/p>

澧炲姞涓涓祴璇曟暟鎹簱

浠庢湇鍔″櫒璧勬簮綆$悊鍣ㄧ獥鍙o紝鎴戜滑鍙互浣跨敤鍒涘緩鏂扮殑 SQL Server鏁版嵁搴?/b>(Create new SQL Server Database) 鑿滃崟欏廣備絾鏄灝忓績榪欑鏂規硶錛屽鏋滄垜浠鍦ㄥ叾瀹冭綆楁満涓婃墽琛屾祴璇曠殑璇濓紝鎴戜滑瑕佷繚璇佸湪涓鍙版湇鍔″櫒涓婂垱寤烘暟鎹簱錛屽叾瀹冨彲鑳芥墽琛屾祴璇曠殑璁$畻鏈哄繀欏昏兘澶熻闂鏈嶅姟鍣?鈥?渚嬪涓鍙扮敤浜庢瀯寤虹殑璁$畻鏈恒?/p>

鍙﹀涓涓夋嫨鏄粎浠呭鍔犱竴涓暟鎹簱鏂囦歡銆備嬌鐢?b>欏圭洰->澧炲姞鏂伴」鈥?/b> (Project->Add new item...) 鍏佽鍚戦」鐩彃鍏ヤ竴涓?SQL 鏁版嵁搴撴枃浠躲傝繖縐嶆柟娉曚嬌嫻嬭瘯鏁版嵁鍜屾祴璇曢」鐩繚鎸佸湪涓璧楓傜己鐐規槸濡傛灉鏁版嵁搴撳彉寰楀緢澶э紝鎴戜滑灝變笉鎯寵繖涔堝仛錛岃屽畞鍙彁渚涘叏灞鐨勬暟鎹簮銆?/p>

瀵逛簬鏈」鐩腑鐨勬暟鎹紝鎴戜滑鍒涘緩涓涓悕涓?VSTSDemo.mdf鐨勬湰鍦伴」鐩暟鎹簱鏂囦歡銆備負浜嗗悜鏂囦歡鍔犲叆嫻嬭瘯鏁版嵁錛屾垜浠嬌鐢ㄨ彍鍗?b>宸ュ叿->榪炴帴鍒版暟鎹簱 (Tools->Connect to Database)錛岀劧鍚庢寚瀹?VSTSDemo.mdf 鏂囦歡銆傜劧鍚庯紝浠庢湇鍔″櫒璧勬簮綆$悊鍣ㄧ獥鍙f垜浠彲浠ヤ嬌鐢ㄨ璁″櫒鍔犲叆涓涓柊鐨勮〃 LongonInfoTest銆傛竻鍗?5 鏄劇ず浜嗚琛ㄧ殑瀹氫箟銆?/p>

娓呭崟 5. LogonInfoTestData SQL 鑴氭湰

CREATE TABLE dbo.LogonInfoTest
   (
   UserId nchar(256) NOT NULL PRIMARY KEY CLUSTERED,
   Password nvarchar(256) NULL,
   IsValid bit NOT NULL
   )  ON [PRIMARY]
GO

淇濆瓨琛ㄥ悗錛屾垜浠彲浠ュ皢鍏舵墦寮錛岀劧鍚庤緭鍏ヤ笉鍚岀殑闈炴硶瀵嗙爜錛屽涓嬭〃鎵紺恒?/p>
UserId Password IsValid

Humperdink

P@w0d

False

IMontoya

p@ssword

False

Inigo.Montoya

P@ssw0rd

False

Wesley

Password

False

灝嗘暟鎹笌嫻嬭瘯鍏寵仈

涓鏃﹀畬鎴愯〃鐨勫垱寤猴紝鎴戜滑闇瑕佸皢鍏朵笌嫻嬭瘯 InvalidPasswords()鑱旂郴璧鋒潵銆備粠嫻嬭瘯 InvalidPasswords鐨勫睘鎬х獥鍙o紝鎴戜滑濉啓鏁版嵁榪炴帴瀛楃涓?/b>(Data Connection String) 鍜?b>鏁版嵁琛ㄥ悕 (Data Table Name) 灞炴с傝繖鏍峰仛灝嗕嬌鐢ㄩ檮鍔犵殑灞炴?DataSourceAttribute鍜?DataTableNameAttribute鏇存柊嫻嬭瘯銆傛渶緇堢殑鏂規硶 ChangePasswordTest()鍦ㄦ竻鍗?6 涓樉紺恒?/p>

娓呭崟 6. 鐢ㄤ簬鏁版嵁椹卞姩嫻嬭瘯鐨勬祴璇曚唬鐮?/b>

      
enum Column
      {
         UserId,
         Password,
         IsValid
      }

      private TestContext testContextInstance;

      /// <summary>
      ///Gets or sets the test context which provides
      ///information about and functionality for the 
      ///current test run.
      ///</summary>
      public TestContext TestContext
      {
         get
         {
            return testContextInstance;
         }
         set
         {
            testContextInstance = value;
         }
      }

      [TestMethod]
      [Owner("Mark Michaelis")]
      [TestProperty("TestCategory", "Developer"), 
      DataSource("System.Data.SqlClient", 
         "Data Source=.\\SQLEXPRESS;AttachDbFilename=\"<Path to the sample .mdf file>";Integrated 
Security=True", "LogonInfoTest", DataAccessMethod.Sequential)] public void ChangePasswordTest() { string userId = (string)TestContext.DataRow[(int)Column.UserId]; string password = (string)TestContext.DataRow[(int)Column.Password]; bool isValid = (bool)TestContext.DataRow[(int)Column.IsValid]; LogonInfo logonInfo = new LogonInfo(userId, "P@ssw0rd"); if (!isValid) { Exception exception = null; try { logonInfo.ChangePassword( "P@ssw0rd", password); } catch (Exception tempException) { exception = tempException; } Assert.IsNotNull(exception, "The expected exception was not thrown."); Assert.AreEqual<Type>( typeof(ArgumentException), exception.GetType(), "The exception type was unexpected."); } else { logonInfo.ChangePassword( "P@ssw0rd", password); Assert.AreEqual<string>(password, logonInfo.Password, "The password was not changed."); } }

娓呭崟 6 絎竴涓渶瑕佹敞鎰忕殑鍦版柟鏄鍔犱簡 DataSourceAttribute灞炴э紝瀹冩寚鏄庝簡榪炴帴瀛楃涓層佽〃鍚嶅拰璁塊棶欏哄簭銆傚湪榪欎釜娓呭崟涓紝鎴戜滑浣跨敤鏁版嵁搴撴枃浠跺悕鏍囪瘑鏁版嵁搴撱傝繖鏍風殑浼樼偣鏄鏂囦歡鍜屾祴璇曢」鐩竴璧瘋縼縐伙紝鍋囪瀹冨彲鑳戒細琚Щ鍔ㄥ埌涓涓浉瀵圭殑璺緞銆?/p>

絎簩涓敞鎰忕殑鍦版柟鏄?TestContext.DataRow璋冪敤銆?b>TestContext鏄湪鎴戜滑榪愯鍒涘緩嫻嬭瘯鍚戝鏃剁敱鐢熸垚鍣ㄦ彁渚涚殑灞炴э紝瀹冨湪榪愯鏃剁敱嫻嬭瘯鎵ц寮曟搸鑷姩璧嬪鹼紝榪欐牱鎴戜滑灝卞彲浠ュ湪嫻嬭瘯涓闂窡嫻嬭瘯鐜鍏寵仈鐨勬暟鎹傚鍥?7 鎵紺恒?/p>


鍥?/b> 7. TestContext 鍏寵仈

濡傚浘 7 鎵紺猴紝TestContext鎻愪緵浜?TestDirectory鍜?TestName鏁版嵁錛屼互鍙?BeginTimer()鍜?b>EndTimer()鏂規硶銆傚 ChangePasswordTest()鏂規硶鏈鏈夋剰涔夌殑鏄?DataRow灞炴с傚洜涓?ChangePasswordTest()鏂規硶鐢?DataSourceAttribute淇グ錛岃灞炴ф寚瀹氱殑琛ㄨ繑鍥炴瘡涓褰曟椂錛岃鏂規硶閮戒細琚皟鐢ㄤ竴嬈°傝繖灝變嬌嫻嬭瘯浠g爜浣跨敤榪愯涓殑嫻嬭瘯鐨勬暟鎹紝鑰屼笖瀵規彃鍏?LongonInfoTest 琛ㄧ殑姣忔潯璁板綍閲嶅鎵ц嫻嬭瘯銆傚鏋滆〃鍖呭惈鍥涙潯璁板綍錛岄偅涔堟祴璇曞皢浼氬垎鍒墽琛屽洓嬈°?/p>

浣跨敤榪欐牱鐨勬暟鎹┍鍔ㄦ祴璇曟柟娉曪紝鍙互寰堝鏄撶殑鎻愪緵棰濆鐨勬祴璇曟暟鎹紝鑰屼笉闇瑕佺紪鍐欎換浣曚唬鐮併備竴鏃﹂渶瑕侀澶栫殑嫻嬭瘯鐢ㄤ緥錛屾垜浠渶瑕佸仛鐨勫氨鏄悜 LongonInfoTest 琛ㄥ鍔犲叧鑱旂殑鏁版嵁銆傚敖綆℃垜浠彲浠ュ垱寤轟袱涓嫭绔嬬殑嫻嬭瘯鏉ヤ嬌鐢ㄥ崟鐙殑琛ㄥ垎鍒祴璇曟湁鏁堝拰鏃犳晥鏁版嵁錛岃繖涓壒瀹氱殑渚嬪瓙鍚堝茍浜嗚繖浜涙祴璇曟潵鏄劇ず紼嶅井澶嶆潅鐨勬暟鎹祴璇曞疄渚嬨?/p>

瀹炵幇鍜岄噸鏋勭洰鏍囨柟娉?/h2>

鐜板湪鎴戜滑宸茬粡鏈変簡嫻嬭瘯錛屾槸鏃跺欎負嫻嬭瘯緙栧啓瀹炵幇浜嗐備嬌鐢?C# 閲嶆瀯宸ュ叿錛屾垜浠彲浠ュ彸閿崟鍑?ChangePassword()鏂規硶璋冪敤錛岄夋嫨鑿滃崟欏?/b>GenerateMethodStub錛岀劧鍚庡浜庣敓鎴愮殑鏂規硶鎻愪緵瀹炵幇錛屼竴鏃︽垜浠垚鍔熷湴榪愯浜嗕嬌鐢ㄦ墍鏈夋祴璇曟暟鎹殑嫻嬭瘯錛屾垜浠篃鍙互寮濮嬮噸鏋勪唬鐮佷簡錛?b>LogonInfo 綾葷殑鏈緇堝疄鐜板娓呭崟 7 鎵紺恒?/p>

娓呭崟 7. LogonInfo 綾?/b>

using System;
using System.Text.RegularExpressions;

namespace VSTTDemo
{
   public class LogonInfo
   {
      public LogonInfo(string userId, string password)
      {
         this.UserId = userId;
         this.Password = password;
      }

      private string _UserId;
      public string UserId
      {
         get { return _UserId; }
         private set
         {
            if (value == null || value.Trim() == string.Empty)
            {
               throw new ArgumentException(
                  "Parameter userId may not be null or blank.");
            }
            _UserId = value;
         }
      }

      private string _Password;
      public string Password
      {
         get { return _Password; }
         private set
         {
            string errorMessage;
            if (!IsValidPassword(value, out errorMessage))
            {
               throw new ArgumentException(
                  errorMessage);
            }
            _Password = value;
         }
      }

      public static bool IsValidPassword(string value, 
         out string errorMessage)
      {
         const string passwordSizeRegex = "(?=^.{6,255}$)";
         const string uppercaseRegex = "(?=.*[A-Z])";
         const string lowercaseRegex = "(?=.*[a-z])";
         const string punctuationRegex = @"(?=.*\d)";
         const string upperlowernumericRegex = "(?=.*[^A-Za-z0-9])";

         bool isValid;
         Regex regex = new Regex(
            passwordSizeRegex +
            "(" + punctuationRegex + uppercaseRegex + lowercaseRegex +
               "|" + punctuationRegex + upperlowernumericRegex + lowercaseRegex +
               "|" + upperlowernumericRegex + uppercaseRegex + lowercaseRegex +
               "|" + punctuationRegex + uppercaseRegex + upperlowernumericRegex +
            ")^.*");

         if (value == null || value.Trim() == string.Empty)
         {
            isValid = false;
            errorMessage = "Password may not be null or blank.";
         }
         else
         {
            if (regex.Match(value).Success)
            {
               isValid = true;
               errorMessage = "";
            }
            else
            {
               isValid = false;
               errorMessage = "Password does not meet the complexity requirements.";
            }
         }
         return isValid;
      }

      public void ChangePassword(
         string oldPassword, string newPassword)
      {
         if (oldPassword == Password)
         {
            Password = newPassword;
         }
         else
         {
            throw new ArgumentException(
               "The old password was not correct.");
         }
      }
   }
}

浠g爜瑕嗙洊

鍗曞厓嫻嬭瘯鐨勪竴涓叧閿害閲忔槸鍐沖畾鍦ㄥ崟鍏冩祴璇曡繍琛屾椂嫻嬭瘯浜嗗灝戜唬鐮併傝搴﹂噺縐頒負浠g爜瑕嗙洊錛孴eam Test 鍖呭惈浜嗕竴涓唬鐮佽鐩栧伐鍏鳳紝鍙互璇︾粏瑙i噴琚墽琛屼唬鐮佺殑鐧懼垎鐜囷紝騫剁獊鍑烘樉紺哄摢浜涗唬鐮佽鎵ц錛岄偅浜涙病鏈夎鎵ц銆傝鍔熻兘濡傚浘 8 鎵紺恒?/p>


鍥?/b> 8. 紿佸嚭鏄劇ず浠g爜瑕嗙洊

鍥?8 鏄劇ず浜嗚繍琛屾墍鏈夊崟鍏冩祴璇曞悗鐨勪唬鐮佽鐩栫殑紿佸嚭鏄劇ず鎯呭喌銆傜孩鑹茬獊鍑烘樉紺鴻鏄庝簡鎴戜滑鏈変駭鍝佷唬鐮佹病鏈夎繍琛屼換浣曞崟鍏冩祴璇曪紝榪欒鏄庢垜浠紪鍐欒繖浜涗唬鐮佹椂鏈伒寰?TDD 鍘熷垯錛屽嵆鍦ㄧ紪鍐欏疄鐜板墠鍏堟彁渚涙祴璇曘?/p>

鍒濆鍖栧拰娓呴櫎嫻嬭瘯

涓鑸潵璇達紝嫻嬭瘯綾諱笉浠呭寘鍚嫭绔嬬殑嫻嬭瘯鏂規硶錛岃繕鍖呭惈浜嗕笉鍚岀殑瀵規祴璇曡繘琛屽垵濮嬪寲鍜屾竻闄ょ殑鏂規硶銆傚疄闄呬笂錛屽垱寤烘祴璇曞悜瀵煎湪鍒涘緩 VSTSDemo.Test 欏圭洰鏃訛紝灝嗕竴浜涜繖鏍風殑鏂規硶娣誨姞鍒扮被 LongonInfoTest 涓紝瑙佹竻鍗?8銆?/p>

娓呭崟 8. 鏈緇堢殑 LogonInfoTest 綾?/b>

using VSTTDemo;
using Microsoft.VisualStudio.QualityTools.UnitTesting.Framework;
using System;

namespace VSTSDemo.Test
{
   /// <summary>
   ///This is a test class for VSTTDemo.LogonInfo and is intended
   ///to contain all VSTTDemo.LogonInfo Unit Tests
   ///</summary>
   [TestClass()]
   public class LogonInfoTest
   {

      private TestContext testContextInstance;

      /// <summary>
      ///Gets or sets the test context which provides
      ///information about and functionality for the 
      ///current test run.
      ///</summary>
      public TestContext TestContext
      {
         get
         {
            return testContextInstance;
         }
         set
         {
            testContextInstance = value;
         }
      }

      /// <summary>
      ///Initialize() is called once during test execution before
      ///test methods in this test class are executed.
      ///</summary>
      [TestInitialize()]
      public void Initialize()
      {
         //  TODO: Add test initialization code
      }

      /// <summary>
      ///Cleanup() is called once during test execution after
      ///test methods in this class have executed unless
      ///this test class' Initialize() method throws an exception.
      ///</summary>
      [TestCleanup()]
      public void Cleanup()
      {
         
         //  TODO: Add test cleanup code
      }


      // ...

      [TestMethod]
      // ...
      public void ChangePasswordTest()
      {   
      // ...
      }

   }
}

鐢ㄤ簬瀵規祴璇曡繘琛岃緗拰娓呴櫎鐨勬柟娉曞垎鍒敱灞炴?TestInitializeAttribute鍜?TestCleanupAttribute淇グ銆傚湪姣忎釜榪欐牱鐨勬柟娉曚腑錛屾垜浠彲浠ュ姞鍏ラ澶栫殑浠g爜錛屽畠浠皢浼氬湪姣忎釜嫻嬭瘯鍓嶆垨鑰呮祴璇曞悗榪愯銆傝繖鎰忓懗鐫鍦ㄦ瘡嬈″搴斾簬 LongonInfoTest 琛ㄧ殑璁板綍鐨?ChangePasswordTest()鎵ц鍓嶏紝Initialize() 鍜?Cleanup() 閮戒細琚墽琛岋紝姣忔 NullUserIdInConstructor鍜?EmptyUserIdInConstructor鎵ц鏃朵篃浼氬彂鐢熷悓鏍風殑鎯呭喌銆傝繖鏍風殑鏂規硶鍙互鐢ㄤ簬鍚戞暟鎹簱涓彃鍏ラ粯璁ょ殑鏁版嵁錛岀劧鍚庡湪嫻嬭瘯瀹屾垚鏃舵竻闄ゆ彃鍏ョ殑鏁版嵁銆備緥濡傦紝鎴戜滑鍙互鍋氬埌鍦?Initialize()涓紑濮嬩竴涓簨鍔★紝鐒跺悗鍦ㄦ竻闄ゆ椂鍥炴粴鍚屼竴涓簨鍔★紝榪欐牱涓鏉ワ紝濡傛灉嫻嬭瘯鏂規硶浣跨敤鐩稿悓鐨勮繛鎺ユ椂錛屾暟鎹姸鎬佷細鍦ㄦ瘡嬈℃祴璇曟墽琛屽畬鎴愭椂鎭㈠鍘熺姸銆傜被浼煎湴錛屾祴璇曟枃浠朵篃鍙互榪欐牱澶勭悊銆?/p>

鍦ㄨ皟璇曟湡闂達紝TestCleanupAttribute淇グ鐨勬柟娉曞彲鑳界敱浜庤皟璇曞櫒鍦ㄦ竻闄ょ殑浠g爜鎵ц鍓嶇粓姝㈣繍琛屻傜敱浜庤繖涓師鍥狅紝鏈濂藉湪璁劇疆嫻嬭瘯鏈熼棿媯鏌ユ竻闄ゆ儏鍐碉紝騫跺湪闇瑕佹椂鍦ㄨ緗祴璇曞墠鎵ц娓呴櫎浠g爜銆傚叧浜庡垵濮嬪寲鍜屾竻闄ょ殑鍏跺畠鍙敤鐨勬祴璇曞睘鎬ф湁 AssemblyInitializeAttribute/AssemblyCleanupAttribute鍜?ClassInitializeAttribute/ClassCleanupAttribute銆傜▼搴忛泦鐩稿叧鐨勫睘鎬у鏁翠釜紼嬪簭闆嗚繍琛屼竴嬈★紝鑰岀被鐩稿叧鐨勫睘鎬у涓涓壒瀹氱殑嫻嬭瘯綾葷殑鍔犺澆榪愯涓嬈°?/p>

鏈浣沖疄璺?/h2>

鍦ㄧ粨鏉熷墠鎴戜滑鍥為【鍑犵鍗曞厓嫻嬭瘯鐨勬渶浣沖疄璺點傞鍏堬紝TDD 鏄潪甯告湁浠峰肩殑瀹炶返銆傚湪鎵鏈夌幇鏈夌殑寮鍙戞柟娉曚腑錛孴DD 鍙兘鏄騫存潵鏍規湰涓婃敼榪涘紑鍙戜笖鎶曡祫鎴愭湰鏈灝忕殑涓縐嶃傛瘡涓?QA 宸ョ▼甯堥兘浼氬憡璇夋偍錛屽紑鍙戜漢鍛樺湪娌℃湁鐩稿簲鐨勬祴璇曞墠涓嶄細鍐欏嚭鎴愬姛鐨勮蔣浠躲傛湁浜?TDD錛屽疄璺墊槸鍦ㄥ疄鐜板墠緙栧啓嫻嬭瘯錛屽茍涓旂悊鎯蟲儏鍐墊槸錛岀紪鍐欑殑嫻嬭瘯鍙互鎴愪負鏃犻渶浜哄伐鍙備笌鎵ц鐨勬瀯寤鴻剼鏈殑涓閮ㄥ垎銆傞渶瑕佽緇冩潵寮濮嬪吇鎴愪範鎯紝浣嗕竴鏃﹀緩绔嬩範鎯悗錛屼笉浣跨敤 TDD 鏂規硶緙栫爜灝卞儚寮杞︽椂涓嶇郴瀹夊叏甯︿竴鏍楓?/p>

瀵逛簬嫻嬭瘯鏈韓錛屾湁涓浜涢澶栫殑鍘熷垯鍙互甯姪鎴愬姛榪涜嫻嬭瘯錛?/p>
鈥?/td>

閬垮厤嫻嬭瘯浜х敓渚濊禆鎬э紝榪欐牱嫻嬭瘯闇瑕佹寜鐓х壒瀹氱殑欏哄簭鎵ц銆傛瘡涓祴璇曢兘搴旇鏄嚜娌葷殑銆?/p>

鈥?/td>

浣跨敤嫻嬭瘯鍒濆鍖栦唬鐮侀獙璇佹祴璇曟竻闄ゅ凡緇忔垚鍔熸墽琛岋紝濡傛灉娌℃湁鍒欏湪鎵ц嫻嬭瘯鍓嶉噸鏂版墽琛屾竻闄ゃ?

鈥?/td>

鍦ㄧ紪鍐欎換浣曚駭鍝佷唬鐮佺殑瀹炵幇鍓嶇紪鍐欐祴璇曘?

鈥?/td>

瀵逛簬浜у搧浠g爜涓殑姣忎釜綾誨垱寤轟竴涓祴璇曠被銆傝繖鏍峰彲浠ョ畝鍖栨祴璇曠殑緇勭粐錛屽茍鍙互瀹規槗鍦伴夋嫨鍦ㄤ綍澶勬斁緗瘡涓祴璇曘?/p>

鈥?/td>

浣跨敤 Visual Studio 鐢熸垚鍒濆鍖栫殑嫻嬭瘯欏圭洰銆傝繖鏍峰彲浠ュぇ澶у噺灝戞墜宸ヨ緗祴璇曢」鐩茍涓庝駭鍝侀」鐩叧鑱旂殑姝ラ銆?

鈥?/td>

閬垮厤鍒涘緩鍏朵粬渚濊禆璁$畻鏈虹殑嫻嬭瘯錛屼緥濡備緷璧栫壒瀹氱殑鐩綍璺緞鐨勬祴璇曘?/p>

鈥?/td>

鍒涘緩妯℃嫙瀵硅薄 (mock object) 鏉ユ祴璇曟帴鍙c傛ā鎷熷璞¢氬父鍦ㄩ渶瑕侀獙璇?API 絎﹀悎鎵闇鍔熻兘鐨勬祴璇曢」鐩腑瀹炵幇銆?/p>

鈥?/td>

鍦ㄧ戶緇垱寤烘柊鐨勬祴璇曞墠楠岃瘉鎵鏈夋祴璇曡繍琛屾垚鍔熴傝繖鏍峰彲浠ヤ繚璇佸湪鐮村潖浠g爜鍚庣珛鍒昏繘琛屼慨姝c?/p>

鈥?/td>

鍙互鏈澶у寲鏃犻渶浜哄伐鍙備笌鎵ц鐨勬祴璇曚唬鐮併傚湪渚濊禆浜庢墜宸ユ祴璇曞墠錛屽繀欏誨畬鍏ㄨ偗瀹氭棤娉曢噰鐢ㄥ悎鐞嗙殑鏃犻渶浜哄伐鍙備笌鎵ц鐨勬祴璇曟柟妗堛?

灝忕粨

鎬葷殑鏉ヨ錛孷STS 鐨勫崟鍏冩祴璇曞姛鑳芥湰韜緢濂界悊瑙c傝屼笖灝界鏈枃娌℃湁鎻愬埌錛屽畠榪樺彲浠ラ氳繃鑷畾涔夋墽琛屽紩鎿庤繘琛屾墿灞曘傛澶栵紝瀹冨寘鍚簡浠g爜瑕嗙洊鍒嗘瀽鐨勫姛鑳斤紝榪欏浜庤瘎浠鋒祴璇曠殑鍏ㄩ潰鎬ч潪甯告湁鐢ㄣ傞氳繃浣跨敤 VSTS錛屾偍鍙互灝嗘祴璇曟暟鐩拰 bug 鏁扮洰鎴栫紪鍐欑殑浠g爜鏁伴噺榪涜鍏寵仈姣旇緝銆傝繖涓洪」鐩殑榪愯鐘跺喌鎻愪緵浜嗗緢濂界殑鎸囨爣銆?/p>

鏈枃浠嬬粛浜員eam Test 浜у搧涓殑鍩烘湰鍗曞厓嫻嬭瘯鍔熻兘錛屼篃鎺㈣浜嗗叧浜庢暟鎹┍鍔ㄦ祴璇曠殑涓浜涙洿鍔犻珮綰х殑鍔熻兘銆傞氳繃寮濮嬪疄璺靛浠g爜榪涜鍗曞厓嫻嬭瘯錛屾偍浼氫負浜у搧鐨勬暣涓敓鍛芥湡寤虹珛涓濂楀疂璐電殑嫻嬭瘯闆嗐俆eam Test 閫氳繃涓?Visual Studio 鐨勫己澶ч泦鎴愬拰鍏跺畠 VSTS 浜у搧綰匡紝浣胯繖涓鍒囧彉寰楀鏄撱?/p>

Mark Michaelis 鍦?Itron 鍏徃鎷呬換杞歡鏋舵瀯甯堝拰璁插笀銆備粬鏇劇粡瀵瑰嚑涓井杞殑浜у搧璁捐榪涜媯鏌ワ紝鍖呮嫭 C# 鍜孷STS銆傜幇鍦ㄤ粬姝e湪鎾板啓鍙﹀涓鏈湁鍏?C# 鐨勪功錛孍ssential C# (Addison Wesley)銆備笉浣跨敤璁$畻鏈烘椂錛屼粬浼氶櫔浼村浜猴紝榪涜鎴峰榪愬姩錛屾垨鑰呰繘琛岀幆鐞冩梾琛屻侻ark Michaelis 浣忓湪 Spokane, WA銆傛偍鍙互閫氳繃 mark@michaelis.net 鍜屼粬鑱旂郴鎴栬呰闂粬鐨勭綉緇滄棩蹇楋細http://mark.michaelis.net銆?/p>

杞埌鍘熻嫳鏂囬〉闈?/a>

緲昏瘧鑰匧uke鏄井杞叕鍙哥殑杞歡宸ョ▼甯堬紝涔犳儻浣跨敤C++鍜孋#寮鍙戝簲鐢ㄧ▼搴忋傞棽鏆囨椂闂翠粬鍠滄闊充箰錛屾梾娓稿拰鎬鏃ф父鎴忥紝騫朵笖鎰挎剰甯姪MSDN緲昏瘧鏇村鐨勬枃绔犲拰鍏朵粬寮鍙戣呭叡浜傚彲浠ラ氳繃ecaijw@msn.com鑱旂郴浠栥?/p>

]]>Make Your Apps Fly with the New Enterprise Performance Tool (閫氳繃鏂扮殑 Enterprise Performance Tool 浣垮簲鐢ㄧ▼搴忛閫熻繍琛?(鍖呭惈鍚勭鎺掑簭綆楁硶鐨勫疄鐜?http://www.shnenglu.com/mzty/archive/2006/04/27/6389.html姊﹀湪澶╂動姊﹀湪澶╂動Thu, 27 Apr 2006 09:46:00 GMThttp://www.shnenglu.com/mzty/archive/2006/04/27/6389.htmlhttp://www.shnenglu.com/mzty/comments/6389.htmlhttp://www.shnenglu.com/mzty/archive/2006/04/27/6389.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/6389.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/6389.htmlhttp://msdn.microsoft.com/msdnmag/issues/04/12/EnterprisePerformance/default.aspx#contents


涓枃:http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/enterpriseperformance.mspx?mfr=true


鍙戝竷鏃ユ湡錛?1/6/2005 | 鏇存柊鏃ユ湡錛?1/6/2005

John Robbins

鏈枃鍩轟簬 Visual Studio 2005 鐨勯鍙戝竷鐗堟湰銆傛枃涓寘鍚殑鎵鏈変俊鎭潎鏈夊彲鑳藉彉鏇淬?/p>

鏈枃璁ㄨ錛?

鈥?/td>

鍒嗘瀽鍣ㄧ殑鍐呴儴宸ヤ綔鏂瑰紡

鈥?/td>

EPT 鐨勭伒媧誨姛鑳?

鈥?/td>

涓涓緵鍒嗘瀽鐨勭ず渚嬪簲鐢ㄧ▼搴?/p>

浠g爜鍙粠浠ヤ笅浣嶇疆涓嬭澆錛?/b>
EnterprisePerformance.exe (258KB)

蹇熶唬鐮佷粛鐒跺緢鍙楁榪庛傚嵆浣挎垜鐢ㄦ潵閿叆鏈枃鐨勮綆楁満鍏鋒湁瓚沖鐨勮兘鍔涘拰鍐呭瓨錛岃兘澶熷悓鏃舵帶鍒朵竴搴у師瀛愯兘鍙戠數鍘傘佷竴涓伀鏄熸極娓歌鍒掍互鍙婄編鍥借タ閮ㄤ笂絀虹殑絀轟腑浜ら氾紝騫朵笖浠嶇劧鍏鋒湁鍏呰凍鐨勮兘鍔涙潵澶勭悊鏄熼檯鎺㈢儲涓殑 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鈥濓紙璇ユ枃绔犳憳鑷?MSDNMagazine 2003 騫?9 鏈堝垔錛夈傚綋鎴戝紑濮嬭璁?EPT 鐨勬椂鍊欙紝鎮ㄥ皢鐪嬪埌瀹冧嬌鐢ㄦ湳璇滀華琛ㄥ寲鈥濇潵琛ㄧず鎺㈡祴鏂規硶銆?/p>

鎺㈡祴鍒嗘瀽鍣ㄦ柟娉曠殑涓昏浼樺娍鍦ㄤ簬錛屽綋搴旂敤紼嬪簭鎵ц鏃訛紝灝嗗緇堣皟鐢ㄦ墍鎻掑叆鐨勬帰嫻嬨傝繖鏍鳳紝鍒嗘瀽鍣ㄨ繍琛屽簱灝嗗榪愯鍏鋒湁瀹屾暣鐨勮璇嗭紝鍥犳鍦ㄧ敓鎴愬叧閿俊鎭紙渚嬪錛屽嚱鏁頒箣闂寸殑鐖跺瓙鍏崇郴錛夋椂鍙互紜繚姝g‘錛屽茍涓斿垎鏋愬櫒鍙互鎶ュ憡瀹岀編鐨勮皟鐢ㄦ爲錛屼互渚挎偍鍙互杞繪澗鎵懼埌鑺辮垂鏈闀挎椂闂寸殑璋冪敤璺緞銆備嬌鐢ㄦ帰嫻嬪垎鏋愬櫒鏃訛紝娌℃湁浠涔堜簨鎯呰兘澶熼樆姝㈠紑鍙戜漢鍛樺彧鍦ㄥ嚱鏁板叆鍙e拰鍑哄彛澶勬彃鍏ユ帰嫻嬨傚彲浠ュ湪婧愪唬鐮佽綰у埆鏀劇疆棰濆鐨勬帰嫻嬶紝浠ヤ究鎮ㄥ鍑芥暟鍏鋒湁瀹屾暣鐨勮璇嗐?/p>

浣嗘槸錛屾帰嫻嬪垎鏋愬櫒鎵鎻愪緵鐨勮緇嗚鍥懼叿鏈変竴浜涚己鐐廣傜涓涓己鐐規槸浠〃鍖栨柟妗堜嬌鐢ㄨ搗鏉ュ彲鑳藉緢楹葷儲錛屽茍涓斿洜涓哄畠鏄湪浜岃繘鍒剁駭鍒噸鍐欙紝鍥犳瀛樺湪寰堝鍙兘寮曞叆娼滃湪閿欒鐨勯鍩熴傛濡傛偍鍙互鎯沖儚鍒扮殑閭f牱錛岃繖浜涙帰嫻嬭繕鍗犵敤浜嗙┖闂達紝浠庤屽鑷翠竴浜涗唬鐮佽啫鑳鍜岃緝浣庣殑鎬ц兘銆傚浜庡畬鍏ㄤ華琛ㄥ寲鐨勫簲鐢ㄧ▼搴忥紝鎺㈡祴鍒嗘瀽鍣ㄥ彲鑳戒細瀵艱嚧閫熷害澶у箙搴︿笅闄嶏紝浠ヨ嚦浜庡嚑涔庝笉鍙兘鍦ㄧ敓浜х郴緇熶笂榪愯浠〃鍖栫殑浜岃繘鍒舵枃浠訛紝浠庤屼嬌鎮ㄥ湪鏈闇瑕佽鍒嗘瀽鍣ㄧ殑鏃跺欏嵈鏃犳硶鍒╃敤瀹冦?/p>

姝e鍏跺悕縐版墍鏆楃ず鐨勯偅鏍鳳紝閲囨牱鍒嗘瀽鍣ㄦ寜鐓ч鍏堝畾涔夌殑鏃墮棿闂撮殧鑾峰緱搴旂敤紼嬪簭涓鍦ㄦ墽琛岀殑鎿嶄綔鐨勫揩鐓с傚ぇ澶氭暟寮鍙戜漢鍛橀兘娌℃湁鎰忚瘑鍒?Microsoft 鎬繪槸鍦ㄤ粬浠殑寮鍙戠幆澧冧腑闅忛檮浜嗕竴涓噰鏍峰垎鏋愬櫒銆傚畠琚О涓鴻皟璇曞櫒錛?濡傛灉鎮ㄥ紑濮嬭皟璇曞簲鐢ㄧ▼搴忥紝騫朵笖姣忛殧 30 縐掑乏鍙沖氨涓柇鑷寵皟璇曞櫒錛屽垯鎮ㄥ彲浠ユ敞鎰忓埌搴旂敤紼嬪簭綰跨▼姝e湪浣曞鎵ц錛屼互渚垮緢濂藉湴浜嗚В搴旂敤紼嬪簭鍦ㄤ竴嬈¤繍琛岃繃紼嬩腑鎵ц浜嗗摢浜涙搷浣溿傛垜宸茬粡閫氳繃鎵嬪姩瀹屾垚閲囨牱鍒嗘瀽鍣ㄧ殑宸ヤ綔錛岃В鍐充簡寰堝鐢熶駭鎬ц兘闂銆?/p>

浣塊噰鏍峰垎鏋愬櫒濡傛鏈変環鍊肩殑鍘熷洜鍦ㄤ簬錛屽畠浠叿鏈夋瘮鎺㈡祴鍒嗘瀽鍣ㄥ皬寰楀鐨勭郴緇熷紑閿銆傝繖鎰忓懗鐫錛屾偍鍙互鏈夋洿楂樼殑鏈轟細鍦ㄧ敓浜х郴緇熶腑浣跨敤瀹冧滑錛岃屼笉浼氫嬌鏈嶅姟鍣ㄧ柌浜庡鍛戒互鑷充簬鍋滄満銆傞噰鏍峰垎鏋愬櫒鐨勯棶棰樺湪浜庯紝浠庡簲鐢ㄧ▼搴忎腑鑾峰緱鐨勬墍鏈夋牱鏈緢鏈夊彲鑳芥牴鏈笉鏄劇ず浠諱綍浠g爜銆備緥濡傦紝濡傛灉鎮ㄥ叿鏈夊ぇ閲忎嬌鐢ㄦ暟鎹簱鐨勫簲鐢ㄧ▼搴忥紝鍒欐墍鏈夋牱鏈兘鍙互鏉ヨ嚜鏁版嵁搴撹闂▼搴忛泦鐨勫唴閮ㄣ傛渶鍚庯紝鍙姄鍙栨瘡涓嚎紼嬬殑褰撳墠鎵ц鎸囦護鐨勪紶緇熼噰鏍峰垎鏋愬櫒浼氫嬌寰楃‘瀹氭柟娉曚箣闂寸殑鐖跺瓙鍏崇郴鍙樺緱鍗佸垎鍥伴毦錛屽洜鑰岀‘瀹氭ц兘鏈宸殑鎵ц浠g爜閫斿緞瑕佸洶闅懼緱澶氥?/p>


Enterprise Performance Tool 鐨勫熀鏈師鐞?/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>


Animated Algorithm

瑕佸涔犱換浣曞伐鍏風殑鐢ㄦ硶錛屾偍閮介渶瑕佷竴涓悎閫傜殑紺轟緥搴旂敤紼嬪簭錛屼互渚胯兘澶熸渶浣沖湴鍒╃敤璇ュ伐鍏楓傚湪嫻嬭瘯鍛ㄦ湡鐨勮繖涓鏃跺埢錛孍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 鍥㈤槦灝嗚紼嬪簭浣滀負紺轟緥搴旂敤紼嬪簭闅忛檮鍦ㄤ駭鍝佷腑錛屽垯浼氶潪甯告銆傦紙鍝堝搱銆傦級


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>


鏌ョ湅鍒嗘瀽鍣ㄦ暟鎹?/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>



]]>vs.net 2005 鐨則esthttp://www.shnenglu.com/mzty/archive/2006/04/26/6332.html姊﹀湪澶╂動姊﹀湪澶╂動Wed, 26 Apr 2006 09:15:00 GMThttp://www.shnenglu.com/mzty/archive/2006/04/26/6332.htmlhttp://www.shnenglu.com/mzty/comments/6332.htmlhttp://www.shnenglu.com/mzty/archive/2006/04/26/6332.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/6332.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/6332.htmlhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vstsunittesting.asp

]]>
NUnit鍗曞厓嫻嬭瘯http://www.shnenglu.com/mzty/archive/2006/04/26/6309.html姊﹀湪澶╂動姊﹀湪澶╂動Wed, 26 Apr 2006 06:00:00 GMThttp://www.shnenglu.com/mzty/archive/2006/04/26/6309.htmlhttp://www.shnenglu.com/mzty/comments/6309.htmlhttp://www.shnenglu.com/mzty/archive/2006/04/26/6309.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/6309.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/6309.html闃呰鍏ㄦ枃

]]>
vs.net甯哥敤蹇嵎閿?http://www.shnenglu.com/mzty/archive/2006/04/26/6306.html姊﹀湪澶╂動姊﹀湪澶╂動Wed, 26 Apr 2006 04:55:00 GMThttp://www.shnenglu.com/mzty/archive/2006/04/26/6306.htmlhttp://www.shnenglu.com/mzty/comments/6306.htmlhttp://www.shnenglu.com/mzty/archive/2006/04/26/6306.html#Feedback1http://www.shnenglu.com/mzty/comments/commentRss/6306.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/6306.html涓嬭〃鍒楀嚭浜嗗彲鐢ㄤ簬鈥滈粯璁よ緗濋敭鐩樻柟妗堢殑榛樿緇勫悎閿偮?br />
鈥滃叏灞鈥濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬闆嗘垚寮鍙戠幆澧兟?IDE)聽涓殑涓嶅悓浣嶇疆銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.澶嶅埗聽CTRL聽+聽C
CTRL聽+聽INSERT聽灝嗗綋鍓嶉夊畾鐨勯」澶嶅埗鍒扮郴緇熷壀璐存澘銆偮?br />緙栬緫.鍓垏聽CTRL聽+聽X
SHIFT聽+聽DELETE聽灝嗗綋鍓嶉夊畾鐨勯」縐婚櫎鍒扮郴緇熷壀璐存澘銆偮?br />緙栬緫.寰幆搴旂敤鍓創鏉夸腑鐨勫鍒墮」聽CTRL聽+聽SHIFT聽+聽INS
CTRL聽+聽SHIFT聽+聽V聽灝嗛」浠庘滃伐鍏風鈥濈殑鈥滃壀璐存澘寰幆鈥濋夐」鍗$矘璐村湪鏂囦歡涓殑鎻掑叆鐐癸紝騫惰嚜鍔ㄩ夋嫨綺樿創鐨勯」銆傚彲閫氳繃閲嶅鎸夎繖浜涘揩鎹烽敭鏉ユ煡鐪嬪壀璐存澘涓婄殑姣忎釜欏廣偮?br />緙栬緫.杞埌涓嬩竴涓綅緗燜8聽灝嗗厜鏍囩Щ鍔ㄥ埌涓嬩竴欏癸紝濡傗滀換鍔″垪琛ㄢ濈獥鍙d腑鐨勪換鍔℃垨鈥滄煡鎵劇粨鏋溾濈獥鍙d腑鐨勬悳绱㈠尮閰嶉」銆?font color="#ff1493">姣忔寜涓嬈÷燜8聽閿紝灝辯Щ鍔ㄥ埌鍒楄〃涓殑涓嬩竴涓」銆偮?br />緙栬緫.杞埌涓婁竴涓綅緗燬HIFT聽+聽F8聽鍦ㄢ滀換鍔″垪琛ㄢ濈獥鍙f垨鈥滄煡鎵劇粨鏋溾濈獥鍙d腑錛屽皢鍏夋爣縐誨姩鍒頒笂涓欏廣?/font>聽
緙栬緫.杞埌寮曠敤聽SHIFT聽+聽F12聽鏄劇ず浠g爜涓墍閫夊唴瀹圭殑寮曠敤銆?/font>聽
緙栬緫.鎵撳紑鏂囦歡聽CTRL聽+聽SHIFT聽+聽G聽鏄劇ず鈥滄墦寮鏂囦歡鈥濆璇濇錛屽湪姝ゅ彲閫夋嫨瑕佹墦寮鐨勭幇鏈夋枃浠躲偮?br />緙栬緫.綺樿創聽CTRL聽+聽V
SHIFT聽+聽INSERT聽鍦ㄦ彃鍏ョ偣鎻掑叆鍓創鏉跨殑鍐呭銆偮?br />緙栬緫.閲嶅聽CTRL聽+聽SHIFT聽+聽Z
CTRL聽+聽Y
SHIFT聽+聽ALT聽+聽BACKSPACE聽榪樺師涓婃鎾ゆ秷鐨勬搷浣溿偮?br />緙栬緫.鍙栨秷閫夊畾聽ESC聽鍏抽棴鑿滃崟鎴栧璇濇錛屽彇娑堟鍦ㄨ繘琛岀殑鎿嶄綔錛屾垨灝嗙劍鐐規斁鍦ㄥ綋鍓嶆枃妗g獥鍙d腑銆備粎鍦?NET聽Framework聽璁捐鍣ㄤ腑鍙敤銆偮?br />緙栬緫.鎾ゆ秷聽ALT聽+聽BACKSPACE
CTRL聽+聽Z聽鎾ゆ秷涓婁竴緙栬緫鎿嶄綔銆偮?br />鏂囦歡.鎵撳嵃聽CTRL聽+聽P聽鏄劇ず鈥滄墦鍗扳濆璇濇錛屽彲鍦ㄥ叾涓夋嫨鎵撳嵃鏈鴻緗偮?br />鏂囦歡.鍏ㄩ儴淇濆瓨聽CTRL聽+聽SHIFT聽+聽S聽淇濆瓨褰撳墠瑙e喅鏂規涓殑鎵鏈夋枃妗e拰澶栭儴鏂囦歡欏圭洰涓殑浠諱綍鏂囦歡銆偮?br />鏂囦歡.淇濆瓨閫夊畾欏孤燙TRL聽+聽S聽淇濆瓨褰撳墠欏圭洰涓殑閫夊畾欏廣偮?br />宸ュ叿.杞埌鍛戒護琛屄燙TRL聽+聽/聽灝嗘彃鍏ョ鍙鋒斁緗湪鈥滄爣鍑嗏濆伐鍏鋒爮涓婄殑鈥滄煡鎵?鍛戒護鈥濇涓偮?br />瑙嗗浘.涓嬩竴浠誨姟聽CTRL聽+聽SHIFT聽+聽F12聽縐誨埌鈥滀換鍔″垪琛ㄢ濈獥鍙d腑鐨勪笅涓涓換鍔°偮?br />瑙嗗浘.寮瑰嚭嫻忚涓婁笅鏂嚶燙TRL聽+聽SHIFT聽+聽8聽榪斿洖鍒頒笂嬈℃墽琛屾祻瑙堟搷浣滅殑浣嶇疆銆傚湪鈥滃璞℃祻瑙堝櫒鈥濇垨鈥滅被瑙嗗浘鈥濈獥鍙d腑鍙敤銆偮?br />瑙嗗浘.鏌ョ湅浠g爜聽F7聽鍦ㄧ紪杈戝櫒鐨勨滀唬鐮佲濊鍥句腑鏄劇ず閫夊畾欏廣偮?br />瑙嗗浘.瑙嗗浘璁捐鍣燬HIFT聽+聽F7聽鍦ㄧ紪杈戝櫒鐨勨滆璁♀濊鍥句腑鏄劇ず閫夊畾欏廣偮?br />瑙嗗浘.Web鍚戝悗瀹氫綅聽ALT聽+聽宸︾澶撮敭聽鏄劇ず鏌ョ湅鍘嗗彶璁板綍涓殑鍓嶄竴欏點備粎鍦ㄢ淲eb聽嫻忚鍣ㄢ濈獥鍙d腑鍙敤銆偮?br />瑙嗗浘.Web鍚戝墠瀹氫綅聽ALT聽+聽鍙崇澶撮敭聽鏄劇ず鏌ョ湅鍘嗗彶璁板綍涓殑涓嬩竴欏點備粎鍦ㄢ淲eb聽嫻忚鍣ㄢ濈獥鍙d腑鍙敤銆偮?br />
鈥淗TML聽璁捐鍣ㄢ濆揩鎹烽敭
鍙湁鍦燞TML聽璁捐鍣ㄤ腑榪涜緙栬緫鏃舵墠鑳戒嬌鐢ㄤ笅鍒楀揩鎹風粍鍚堥敭銆傛煇浜涚粍鍚堥敭浠呭湪璇ヨ璁″櫒鐨勭壒瀹氳鍥句腑鍙敤銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.鍒楀嚭鎴愬憳聽CTRL聽+聽J聽緙栬緫浠g爜鏃訛紝鍒楀嚭褰撳墠綾葷殑鎴愬憳浠ュ畬鎴愯鍙ャ備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥淗TML鈥濊鍥俱偮?br />緙栬緫.鍙傛暟淇℃伅聽CTRL聽+聽SHIFT聽+聽絀烘牸閿犲熀浜庡綋鍓嶈璦鏄劇ず鍖呭惈褰撳墠鍙傛暟淇℃伅鐨勫伐鍏鋒彁紺恒備粎鍙敤浜幝燞TML聽緙栬緫鍣ㄧ殑鈥淗TML鈥濊鍥俱偮?br />緙栬緫.瑙嗗浘搴曢儴聽CTRL聽+聽PAGE聽DOWN聽縐誨姩鍒板綋鍓嶆枃妗f湯灝俱備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥淗TML鈥濊鍥句腑鍙敤銆偮?br />緙栬緫.瑙嗗浘欏墮儴聽CTRL聽+聽PAGE聽UP錛堝皢鏂囦歡鍙﹀瓨涓猴級聽縐誨姩鍒板綋鍓嶇獥鍙g殑欏墮儴銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥淗TML鈥濊鍥句腑鍙敤銆偮?br />鏍煎紡.綺椾綋聽CTRL聽+聽B聽鍦ㄧ矖浣撳拰姝e父涔嬮棿鍒囨崲閫夊畾鏂囨湰銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.涔︾聽CTRL聽+聽SHIFT聽+聽L聽鏄劇ず鈥滀功絳鋸濆璇濇銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.杞崲涓鴻秴綰ч摼鎺ヂ燙TRL聽+聽L聽閫夊畾鏂囨湰鍚庯紝鏄劇ず鈥滆秴綰ч摼鎺モ濆璇濇銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.鍑忓皯緙╄繘聽CTRL聽+聽SHIFT聽+聽T聽灝嗛夊畾孌佃惤鍑忓皯涓涓緝榪涘崟鍏冦備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.澧炲姞緙╄繘聽CTRL聽+聽T聽灝嗛夊畾孌佃惤緙╄繘涓涓緝榪涘崟鍏冦備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.鏂滀綋聽CTRL聽+聽I聽鍦ㄦ枩浣撳拰姝e父涔嬮棿鍒囨崲閫夊畾鏂囨湰銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.閿佸畾鍏冪礌聽CTRL聽+聽SHIFT聽+聽K聽闃叉緇濆瀹氫綅鐨勫厓绱犺鎰忓縐誨姩銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.鏄劇ず緗戞牸聽CTRL聽+聽G聽鍒囨崲鏄劇ず緗戞牸銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.緗戞牸綰垮榻惵燙TRL聽+聽SHIFT聽+聽G聽鎸囧畾浣跨敤涓嶅彲瑙佺綉鏍煎榻愬厓绱犮傚彲浠ュ湪鈥滈夐」鈥濆璇濇涓淗TML聽璁捐鍣ㄢ濋夐」鐨勨滆璁♀濈獥鏍間笂璁劇疆緗戞牸闂磋窛錛岀綉鏍煎皢鍦ㄦ偍涓嬫鎵撳紑鏂囨。鏃舵洿鏀廣備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />鏍煎紡.涓嬪垝綰柯燙TRL聽+聽U聽鍦ㄤ笅鍒掔嚎鍜屾甯鎬箣闂村垏鎹㈤夊畾鏂囨湰銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />琛?鍦ㄥ叾宸︿晶鎻掑叆鍒椔燙TRL聽+聽ALT聽+聽宸︾澶撮敭聽灝嗕竴鍒楁坊鍔犲埌琛ㄤ腑褰撳墠鍒楃殑宸﹁竟銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />琛?鍦ㄥ叾鍙充晶鎻掑叆鍒椔燙TRL聽+聽ALT聽+聽鍙崇澶撮敭聽灝嗕竴鍒楁坊鍔犲埌琛ㄤ腑褰撳墠鍒楃殑鍙寵竟銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />琛?鍦ㄥ叾涓婃柟鎻掑叆琛屄燙TRL聽+聽ALT聽+聽涓婄澶撮敭聽鍦ㄨ〃涓殑褰撳墠琛屼箣涓婃坊鍔犱竴琛屻備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />琛?鍦ㄥ叾涓嬫柟鎻掑叆琛屄燙TRL聽+聽ALT聽+聽涓嬬澶撮敭聽鍦ㄨ〃涓殑褰撳墠琛屼箣涓嬫坊鍔犱竴琛屻備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />瑙嗗浘.璇︾粏淇℃伅聽CTRL聽+聽SHIFT聽+聽Q聽鏄劇ず涓嶅叿鏈夊彲瑙嗗寲琛ㄧず褰㈠紡鐨劼燞TML聽鍏冪礌鐨勪俊鍙峰浘鏍囷紝濡傜粷瀵瑰畾浣嶅厓绱犵殑娉ㄩ噴銆佽剼鏈拰瀹氫綅鐐廣備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />瑙嗗浘.涓嬩竴涓鍥韭燙TRL聽+聽PAGE聽DOWN聽浠庘滆璁♀濊鍥懼垏鎹㈠埌鈥淗TML鈥濊鍥撅紝鍙嶄箣浜︾劧銆備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />瑙嗗浘.鍙杈規聽CTRL聽+聽Q聽鍦ㄦ敮鎸伮燘ORDER聽灞炴х殑聽HTML聽鍏冪礌錛堝琛ㄣ佽〃鍗曞厓鏍煎拰闂撮殧錛夊懆鍥存樉紺郝?聽鍍忕礌鐨勮竟妗嗗茍灝嗚灞炴ц緗負闆躲備粎鍙敤浜幝燞TML聽璁捐鍣ㄧ殑鈥滆璁♀濊鍥俱偮?br />
鈥淴ML聽璁捐鍣ㄢ濆揩鎹烽敭
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
鏋舵瀯.鎶樺彔聽CTRL聽+聽(-)聽鎶樺彔宓屽鍏冪礌銆備粎鐢ㄤ簬聽XML聽璁捐鍣ㄧ殑鈥滄灦鏋勨濊鍥俱偮?br />鏋舵瀯.灞曞紑聽CTRL聽+聽(=)聽灞曞紑宓屽鍏冪礌銆備粎鐢ㄤ簬聽XML聽璁捐鍣ㄧ殑鈥滄灦鏋勨濊鍥俱偮?br />
鈥滄帶浠舵搷浣溾濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬鍦ㄨ璁″浘闈笂縐誨姩鍜岄夋嫨鎺т歡浠ュ強鏇存敼鎺т歡鐨勫ぇ灝忋?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.涓嬬Щ鎺т歡聽CTRL聽+聽涓嬬澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢閫夊畾鐨勬帶浠朵互聽1聽涓哄閲忓悜涓嬬Щ鍔ㄣ偮?br />緙栬緫.灝嗘帶浠剁Щ鍔ㄥ埌涓嬩晶緗戞牸聽涓嬬澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢閫夊畾鐨勬帶浠朵互聽8聽涓哄閲忓悜涓嬬Щ鍔ㄣ偮?br />緙栬緫.宸︾Щ鎺т歡聽CTRL聽+聽宸︾澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢鎺т歡浠ヂ?聽涓哄閲忓悜宸︾Щ鍔ㄣ偮?br />緙栬緫.灝嗘帶浠剁Щ鍔ㄥ埌宸︿晶緗戞牸聽宸︾澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢鎺т歡浠ヂ?聽涓哄閲忓悜宸︾Щ鍔ㄣ偮?br />緙栬緫.鍙崇Щ鎺т歡聽CTRL聽+聽鍙崇澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢鎺т歡浠ヂ?聽涓哄閲忓悜鍙崇Щ鍔ㄣ偮?br />緙栬緫.灝嗘帶浠剁Щ鍔ㄥ埌鍙充晶緗戞牸聽鍙崇澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢鎺т歡浠ヂ?聽涓哄閲忓悜鍙崇Щ鍔ㄣ偮?br />緙栬緫.涓婄Щ鎺т歡聽CTRL聽+聽涓婄澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢鎺т歡浠ヂ?聽涓哄閲忓悜涓婄Щ鍔ㄣ偮?br />緙栬緫.灝嗘帶浠剁Щ鍔ㄥ埌涓婁晶緗戞牸聽涓婄澶撮敭聽鍦ㄨ璁″浘闈笂錛屽皢鎺т歡浠ヂ?聽涓哄閲忓悜涓婄Щ鍔ㄣ偮?br />緙栬緫.閫夋嫨涓嬩竴涓帶浠堵燭AB聽閿犵Щ鍔ㄥ埌欏典笂鐨勪笅涓鎺т歡澶勩偮?br />緙栬緫.閫夋嫨涓婁竴涓帶浠堵燬HIFT聽+聽TAB聽閿犵Щ鍥炲埌欏典笂涓婃閫夊畾鐨勬帶浠跺銆偮?br />緙栬緫.鍚戜笅璋冩暣鎺т歡澶у皬聽CTRL聽+聽SHIFT聽+聽涓嬬澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽1聽涓哄閲忥紝澧炲姞鎺т歡鐨勯珮搴︺偮?br />緙栬緫.灝嗘帶浠惰皟澶у埌涓嬩晶緗戞牸聽SHIFT聽+聽涓嬬澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽8聽涓哄閲忥紝澧炲姞鎺т歡鐨勯珮搴︺偮?br />緙栬緫.鍚戝乏璋冩暣鎺т歡澶у皬聽CTRL聽+聽SHIFT聽+聽宸︾澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽1聽涓哄閲忥紝鍑忓皯鎺т歡鐨勫搴︺偮?br />緙栬緫.灝嗘帶浠惰皟澶у埌宸︿晶緗戞牸聽SHIFT聽+聽宸︾澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽8聽涓哄閲忥紝鍑忓皯鎺т歡鐨勫搴︺偮?br />緙栬緫.鍚戝彸璋冩暣鎺т歡澶у皬聽CTRL聽+聽SHIFT聽+聽鍙崇澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽1聽涓哄閲忥紝澧炲姞鎺т歡鐨勫搴︺偮?br />緙栬緫.灝嗘帶浠惰皟澶у埌鍙充晶緗戞牸聽SHIFT聽+聽宸︾澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽8聽涓哄閲忥紝澧炲姞鎺т歡鐨勫搴︺偮?br />緙栬緫.鍚戜笂璋冩暣鎺т歡澶у皬聽CTRL聽+聽SHIFT聽+聽涓婄澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽1聽涓哄閲忥紝鍑忓皯鎺т歡鐨勯珮搴︺偮?br />緙栬緫.灝嗘帶浠惰皟澶у埌涓婁晶緗戞牸聽SHIFT聽+聽涓婄澶撮敭聽鍦ㄨ璁″浘闈笂錛屼互聽8聽涓哄閲忥紝鍑忓皯鎺т歡鐨勯珮搴︺偮?br />
鈥滆皟璇曗濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鍦ㄨ皟璇曚唬鐮佹椂浣跨敤銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
璋冭瘯.搴旂敤浠g爜鏇存敼聽ALT聽+聽F10聽寮濮嬩竴涓滅紪杈戔濇垨鈥滅戶緇濈敓鎴愶紝浠ュ簲鐢ㄥ姝e湪璋冭瘯鐨勪唬鐮佹墍浣滅殑鏇存敼銆偮?br />璋冭瘯.鑷姩紿楀彛聽CTRL聽+聽ALT聽+聽V錛孉聽鏄劇ず鈥滆嚜鍔ㄢ濈獥鍙o紝浠ユ煡鐪嬪綋鍓嶈繃紼嬪唴褰撳墠鎵ц琛岃寖鍥翠腑鐨勫綋鍓嶅彉閲忕殑鍊箋偮犅?br />璋冭瘯.鍏ㄩ儴涓柇聽CTRL聽+聽ALT+聽Break聽涓存椂鍋滄鎵ц璋冭瘯浼氳瘽涓殑鎵鏈夎繘紼嬨備粎閫傜敤浜庘滆繍琛屸濇ā寮忋偮?br />璋冭瘯.鏂偣聽CTRL聽+聽ALT聽+聽B聽鏄劇ず鈥滄柇鐐光濆璇濇錛屽湪姝ゅ彲娣誨姞鍜屼慨鏀規柇鐐廣偮?br />璋冭瘯.璋冪敤鍫嗘爤聽CTRL聽+聽ALT聽+聽C聽鏄劇ず鈥滆皟鐢ㄥ爢鏍堚濈獥鍙o紝浠ユ樉紺哄綋鍓嶆墽琛岀嚎紼嬬殑鎵鏈夋椿鍔ㄨ繃紼嬫垨鍫嗘爤甯у垪琛ㄣ備粎閫傜敤浜庘滆繍琛屸濇ā寮忋偮?br />璋冭瘯.娓呴櫎鎵鏈夋柇鐐孤燙TRL聽+聽SHIFT聽+聽F9聽娓呴櫎欏圭洰涓殑鎵鏈夋柇鐐廣偮?br />璋冭瘯.鍙嶆眹緙柭燙TRL聽+聽ALT聽+聽D聽鏄劇ず鈥滃弽姹囩紪鈥濈獥鍙c偮?br />璋冭瘯.鍚敤鏂偣聽CTRL聽+聽F9聽鍦ㄥ綋鍓嶄唬鐮佽璁劇疆鏂偣銆偮?br />璋冭瘯.寮傚父聽CTRL聽+聽ALT聽+聽E聽鏄劇ず鈥滃紓甯糕濆璇濇銆偮?br />璋冭瘯.鍗蟲椂聽CTRL聽+聽ALT聽+聽I聽鏄劇ず鈥滃嵆鏃垛濈獥鍙o紝鍦ㄦ鍙綆楄〃杈懼紡鍜屾墽琛屼釜鍒懡浠ゃ偮?br />璋冭瘯.灞閮ㄥ彉閲徛燙TRL聽+聽ALT聽+聽V錛孡聽鏄劇ず鈥滃眬閮ㄥ彉閲忊濈獥鍙o紝浠ユ煡鐪嬪綋鍓嶅爢鏍堝撫涓瘡涓繃紼嬬殑鍙橀噺鍙婂叾鍊箋偮?br />璋冭瘯.鍐呭瓨1聽CTRL聽+聽ALT聽+聽M錛?聽閿犳樉紺衡滃唴瀛樎?鈥濈獥鍙o紝浠ユ煡鐪嬪湪鈥滅洃瑙嗏濇垨鈥滃彉閲忊濈獥鍙d腑涓嶈兘娓呮鏄劇ず鐨勫ぇ緙撳瓨鍖恒佸瓧絎︿覆鍜屽叾浠栨暟鎹偮?br />璋冭瘯.鍐呭瓨2聽CTRL聽+聽ALT聽+聽M錛?聽閿犳樉紺衡滃唴瀛樎?鈥濈獥鍙o紝鏌ョ湅鍦ㄢ滅洃瑙嗏濇垨鈥滃彉閲忊濈獥鍙d腑涓嶈兘娓呮鍦版樉紺虹殑澶х紦鍐插尯銆佸瓧絎︿覆鍜屽叾浠栨暟鎹偮?br />璋冭瘯.鍐呭瓨3聽CTRL聽+聽ALT聽+聽M錛?聽閿犳樉紺衡滃唴瀛樎?鈥濈獥鍙o紝鏌ョ湅鍦ㄢ滅洃瑙嗏濇垨鈥滃彉閲忊濈獥鍙d腑涓嶈兘娓呮鍦版樉紺虹殑澶х紦鍐插尯銆佸瓧絎︿覆鍜屽叾浠栨暟鎹偮?br />璋冭瘯.鍐呭瓨4聽CTRL聽+聽ALT聽+聽M錛?聽閿犳樉紺衡滃唴瀛樎?鈥濈獥鍙o紝鏌ョ湅鍦ㄢ滅洃瑙嗏濇垨鈥滃彉閲忊濈獥鍙d腑涓嶈兘娓呮鍦版樉紺虹殑澶х紦鍐插尯銆佸瓧絎︿覆鍜屽叾浠栨暟鎹偮?br />璋冭瘯.妯″潡聽CTRL聽+聽ALT聽+聽U聽鏄劇ず鈥滄ā鍧椻濈獥鍙o紝璇ョ獥鍙e厑璁告煡鐪嬬敱紼嬪簭浣跨敤鐨劼?dll聽鎴柭?exe聽鏂囦歡銆傚湪澶氬鐞嗚皟璇曚腑錛屽彲浠ュ彸鍑誨茍閫夋嫨鈥滄樉紺烘墍鏈夌▼搴忕殑妯″潡鈥濄偮?br />璋冭瘯.鏂版柇鐐孤燙TRL聽+聽B聽鍦ㄥ綋鍓嶄唬鐮佽涓彃鍏ユ垨娓呴櫎鏂偣銆偮?br />璋冭瘯.蹇熺洃瑙喡燙TRL聽+聽ALT聽+聽Q聽鏄劇ず甯︽湁閫夊畾琛ㄨ揪寮忕殑褰撳墠鍊肩殑鈥滃揩閫熺洃瑙嗏濆璇濇銆備粎閫傜敤浜庘滀腑鏂濇ā寮忋備嬌鐢ㄨ鍛戒護鍙鏌ュ皻鏈負鍏跺畾涔夌洃瑙嗚〃杈懼紡鐨勫彉閲忋佸睘鎬ф垨鍏朵粬琛ㄨ揪寮忕殑褰撳墠鍊箋偮犅?br />璋冭瘯.瀵勫瓨鍣燙TRL聽+聽ALT聽+聽G聽鏄劇ず鈥滃瘎瀛樺櫒鈥濈獥鍙o紝璇ョ獥鍙f樉紺虹敤浜庤皟璇曟湰鏈轟唬鐮佸簲鐢ㄧ▼搴忕殑瀵勫瓨鍣ㄥ唴瀹廣偮?br />璋冭瘯.閲嶆柊鍚姩聽CTRL聽+聽SHIFT聽+聽F5聽緇堟璋冭瘯浼氳瘽錛岄噸鏂扮敓鎴愶紝鐒跺悗浠庡紑濮嬪寮濮嬭繍琛屽簲鐢ㄧ▼搴忋傚彲鐢ㄤ簬鈥滀腑鏂濇ā寮忓拰鈥滆繍琛屸濇ā寮忋偮?br />璋冭瘯.榪愯鏂囨。聽CTRL聽+聽ALT聽+聽N聽鏄劇ず鈥滆繍琛屾枃妗b濈獥鍙o紝璇ョ獥鍙f樉紺烘澶勪簬璋冭瘯榪囩▼涓殑鏂囨。闆嗐傞傜敤浜庘滆繍琛屸濇ā寮忋偮?br />璋冭瘯.榪愯鍒板厜鏍囧聽CTRL聽+聽F10聽鍦ㄢ滀腑鏂濇ā寮忎笅錛屼粠褰撳墠璇彞緇х畫鎵ц浠g爜錛岀洿鍒伴夊畾璇彞銆傗滃綋鍓嶆墽琛岃鈥濊竟璺濇寚紺哄櫒鍑虹幇鍦ㄢ滈〉杈硅窛鎸囩ず絎︹濇爮涓?br />鍦ㄢ滆璁♀濇ā寮忎笅錛屽惎鍔ㄨ皟璇曞櫒騫舵墽琛屼唬鐮侊紝鐩村埌鍏夋爣浣嶇疆銆偮?br />璋冭瘯.璁劇疆涓嬩竴璇彞聽CTRL聽+聽SHIFT聽+聽F10聽鍦ㄩ夋嫨鐨勪唬鐮佽涓婅緗墽琛岀偣銆偮犅?br />璋冭瘯.鏄劇ず涓嬩竴璇彞聽ALT聽+聽鏁板瓧閿尯涓殑聽*聽紿佸嚭鏄劇ず瑕佹墽琛岀殑涓嬩竴鏉¤鍙ャ偮?br />璋冭瘯.鍚姩聽F5聽鑷姩闄勫姞璋冨紡鍣紝騫朵粠鈥?lt;Project>聽灞炴р濆璇濇涓寚瀹氱殑鍚姩欏圭洰涓繍琛屽簲鐢ㄧ▼搴忋傚鏋滀負鈥滀腑鏂濇ā寮忥紝鍒欐洿鏀逛負鈥滅戶緇濄偮?br />璋冭瘯.寮濮嬫墽琛屼笉璋冭瘯聽CTRL聽+聽F5聽鍦ㄤ笉璋冪敤璋冭瘯鍣ㄧ殑鎯呭喌涓嬭繍琛屼唬鐮併偮?br />璋冭瘯.閫愯鍙ヂ燜11聽鍦ㄦ墽琛岃繘鍏ュ嚱鏁拌皟鐢ㄥ悗錛岄愭潯璇彞鎵ц浠g爜銆偮?br />璋冭瘯.璺沖嚭聽SHIFT聽+聽F11聽鎵ц褰撳墠鎵ц鐐規墍澶勫嚱鏁扮殑鍓╀綑琛屻偮?br />璋冭瘯.閫愯繃紼嬄燜10聽鎵ц涓嬩竴琛屼唬鐮侊紝浣嗕笉鎵ц浠諱綍鍑芥暟璋冪敤銆偮?br />璋冭瘯.鍋滄璋冭瘯聽SHIFT聽+聽F5聽鍋滄榪愯紼嬪簭涓殑褰撳墠搴旂敤紼嬪簭銆傚彲鐢ㄤ簬鈥滀腑鏂濇ā寮忓拰鈥滆繍琛屸濇ā寮忋偮?br />璋冭瘯.This聽CTRL聽+聽ALT聽+聽V錛孴聽鏄劇ず鈥淭his鈥濈獥鍙o紝璇ョ獥鍙e厑璁告煡鐪嬩笌褰撳墠鏂規硶鍏寵仈鐨勫璞$殑鏁版嵁鎴愬憳銆偮?br />璋冭瘯.綰跨▼聽CTRL聽+聽ALT聽+聽H聽鏄劇ず鈥滅嚎紼嬧濈獥鍙o紝鏌ョ湅鐢ㄤ簬褰撳墠榪涚▼鐨勬墍鏈夌嚎紼嬪強鍏朵俊鎭偮?br />璋冭瘯.鍒囨崲鏂偣聽F9聽鍦ㄥ綋鍓嶈璁劇疆鎴栫Щ闄ゆ柇鐐廣偮?br />璋冭瘯.鍒囨崲鍙嶆眹緙柭燙TRL聽+聽F11聽鏄劇ず褰撳墠婧愭枃浠剁殑鍙嶆眹緙栦俊鎭備粎閫傜敤浜庘滀腑鏂濇ā寮忋偮犅?br />璋冭瘯.鐩戣1聽CTRL聽+聽ALT聽+聽W錛?聽閿犳樉紺衡淲atch1鈥濈獥鍙o紝浠ユ煡鐪嬫墍閫夊彉閲忔垨鐩戣琛ㄨ揪寮忕殑鍊箋偮?br />璋冭瘯.鐩戣2聽CTRL聽+聽ALT聽+聽W錛?聽閿犳樉紺衡淲atch2鈥濈獥鍙o紝浠ユ煡鐪嬫墍閫夊彉閲忔垨鐩戣琛ㄨ揪寮忕殑鍊箋偮?br />璋冭瘯.鐩戣3聽CTRL聽+聽ALT聽+聽W錛?聽閿犳樉紺衡淲atch3鈥濈獥鍙o紝浠ユ煡鐪嬫墍閫夊彉閲忔垨鐩戣琛ㄨ揪寮忕殑鍊箋偮?br />璋冭瘯.鐩戣4聽CTRL聽+聽ALT聽+聽W錛?聽閿犳樉紺衡淲atch4鈥濈獥鍙o紝浠ユ煡鐪嬫墍閫夊彉閲忔垨鐩戣琛ㄨ揪寮忕殑鍊箋偮?br />宸ュ叿.璋冭瘯榪涚▼聽CTRL聽+聽ALT聽+聽P聽鏄劇ず鈥滆繘紼嬧濆璇濇錛岃瀵硅瘽妗嗗厑璁稿湪鍗曚釜瑙e喅鏂規涓悓鏃惰皟璇曞涓▼搴忋偮?br />

鈥滄悳绱㈠拰鏇挎崲鈥濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬鈥滄煡鎵鋸濄佲滄浛鎹⑩濄佲滃湪鏂囦歡涓煡鎵鋸濆拰鈥滃湪鏂囦歡涓浛鎹⑩濆璇濇銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.鏌ユ壘聽CTRL聽+聽F聽鏄劇ず鈥滄煡鎵鋸濆璇濇銆?/font>聽
緙栬緫.鍦ㄦ枃浠朵腑鏌ユ壘聽CTRL聽+聽SHIFT聽+聽F聽鏄劇ず鈥滃湪鏂囦歡涓煡鎵鋸濆璇濇銆偮?br />緙栬緫.鏌ユ壘涓嬩竴涓燜3聽鏌ユ壘涓婃鎼滅儲鏂囨湰鐨勪笅涓涓尮閰嶉」銆偮?br />緙栬緫.鏌ユ壘涓嬩竴涓夊畾欏孤燙TRL聽+聽F3聽鍦ㄦ枃妗d腑鏌ユ壘褰撳墠閫夊畾鏂囨湰鐨勪笅涓涓尮閰嶉」銆偮?br />緙栬緫.鏌ユ壘涓婁竴涓燬HIFT聽+聽F3聽鏌ユ壘鎼滅儲鏂囨湰鐨勪笂涓涓尮閰嶉」銆偮?br />緙栬緫.鏌ユ壘涓婁竴涓夊畾欏孤燙TRL聽+聽SHIFT聽+聽F3聽鏌ユ壘褰撳墠閫夊畾鏂囨湰鐨勪笂涓鍖歸厤欏規垨鑰呮彃鍏ョ鍙峰鐨勫崟璇嶃偮?br />緙栬緫.杞埌鏌ユ壘緇勫悎妗喡燙TRL聽+聽D聽灝嗘彃鍏ョ鍙鋒斁緗湪鈥滄爣鍑嗏濆伐鍏鋒爮涓婄殑鈥滄煡鎵?鍛戒護鈥濊涓偮?br />緙栬緫.闅愯棌鏂囨湰聽ALT聽+聽F3錛孒聽閫夋嫨鎴栨竻闄も滄煡鎵鋸濆璇濇鐨勨滄悳绱㈤殣钘忔枃鏈濋夐」銆偮?br />緙栬緫.娓愯繘寮忔悳绱⒙燙TRL聽+聽I聽鍚姩娓愯繘寮忔悳绱€傚鏋滃惎鍔ㄤ簡娓愯繘寮忔悳绱紝浣嗗皻鏈敭鍏ヤ換浣曞瓧絎︼紝璇鋒仮澶嶄笂涓妯″紡銆傚鏋滃凡鎵懼埌鏂囨湰錛屽垯鎼滅儲涓嬩竴鍖歸厤欏廣偮?br />緙栬緫.澶у皬鍐欏尮閰嵚燗LT聽+聽F3錛孋銆偮犻夋嫨鎴栨竻闄も滄煡鎵鋸濆拰鈥滄浛鎹⑩濇搷浣滅殑鈥滃ぇ灝忓啓鍖歸厤鈥濋夐」銆偮?br />緙栬緫.姝e垯琛ㄨ揪寮徛燗LT聽+聽F3錛孯聽閫夋嫨鎴栨竻闄も滄鍒欒〃杈懼紡鈥濋夐」錛屼互渚跨壒孌婂瓧絎﹀彲鐢ㄤ簬鈥滄煡鎵鋸濆拰鈥滄浛鎹⑩濇搷浣溿偮?br />緙栬緫.鏇挎崲聽CTRL聽+聽H聽鏄劇ず鈥滄浛鎹⑩濆璇濇銆偮?br />緙栬緫.鍦ㄦ枃浠朵腑鏇挎崲聽CTRL聽+聽SHIFT聽+聽H聽鏄劇ず鈥滃湪鏂囦歡涓浛鎹⑩濆璇濇銆偮?br />緙栬緫.鍙嶅悜娓愯繘寮忔悳绱⒙燙TRL聽+聽SHIFT聽+聽I聽鏇存敼娓愯繘寮忔悳绱㈢殑鏂瑰悜錛屼粠鏂囦歡灝懼紑濮嬪悜鏂囦歡澶存悳绱€偮?br />緙栬緫.鍋滄鎼滅儲聽ALT聽+聽F3錛孲聽鏆傚仠褰撳墠鐨勨滃湪鏂囦歡涓煡鎵鋸濇搷浣溿偮?br />緙栬緫.鍚戜笂聽ALT聽+聽F3錛孊聽閫夋嫨鎴栨竻闄も滄煡鎵鋸濆拰鈥滄浛鎹⑩濇搷浣滅殑鈥滃悜涓婃悳绱⑩濋夐」銆偮?br />緙栬緫.鍏ㄥ瓧鍖歸厤聽ALT聽+聽F3錛學聽閫夋嫨鎴栨竻闄も滄煡鎵鋸濆拰鈥滄浛鎹⑩濇搷浣滅殑鈥滃叏瀛楀尮閰嶁濋夐」銆偮?br />緙栬緫.閫氶厤絎β燗LT聽+聽F3錛孭聽閫夋嫨鎴栨竻闄も滄煡鎵鋸濆拰鈥滄浛鎹⑩濇搷浣滅殑鈥滈氶厤絎︹濋夐」銆偮?br />
鈥滃彲瑙嗗寲鏁版嵁搴撳伐鍏封濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬鏁版嵁搴撹璁″櫒鎴栨煡璇㈣璁″櫒銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
鏁版嵁搴?榪愯聽CTRL聽+聽E聽榪愯褰撳墠媧誨姩鐨勬暟鎹簱瀵硅薄銆偮?br />鏁版嵁搴?榪愯閫夊畾鍐呭聽CTRL聽+聽Q聽榪愯聽SQL聽緙栬緫鍣ㄤ腑鐨勫綋鍓嶉夋嫨銆偮?br />鏁版嵁搴?閫愯鍙ヂ燗LT聽+聽F5聽浣垮綋鍓嶇殑媧誨姩鏁版嵁搴撳璞℃寜姝ラ榪涘叆璋冭瘯妯″紡銆偮?br />鏌ヨ.榪愯聽CTRL聽+聽R聽鎵ц鏌ヨ銆備粎鍦ㄢ滄煡璇㈣璁″櫒鈥濅腑鍙敤銆偮?br />瑙嗗浘.鍏崇郴鍥韭燙TRL聽+1聽閿犳樉紺衡滄煡璇⑩濊璁″櫒鐨勨滃叧緋誨浘鈥濈獥鏍箋備粎鍦ㄢ滄煡璇⑩濊璁″櫒涓彲鐢ㄣ偮?br />瑙嗗浘.緗戞牸聽CTRL聽+聽2聽閿犳樉紺衡滄煡璇⑩濊璁″櫒鐨勨滅綉鏍尖濈獥鏍箋備粎鍦ㄢ滄煡璇⑩濊璁″櫒涓彲鐢ㄣ偮?br />瑙嗗浘.緇撴灉聽CTRL聽+4聽閿犳樉紺衡滄煡璇⑩濊璁″櫒鐨勨滅粨鏋溾濈獥鏍箋備粎鍦ㄢ滄煡璇⑩濊璁″櫒涓彲鐢ㄣ偮?br />瑙嗗浘.SQL聽CTRL聽+3聽閿犳樉紺衡滄煡璇⑩濊璁″櫒鐨勨淪QL鈥濈獥鏍箋備粎鍦ㄢ滄煡璇⑩濊璁″櫒涓彲鐢ㄣ偮?br />
鈥滄枃鏈鑸濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鍦ㄦ枃鏈紪杈戝櫒涓敤浜庡湪鎵撳紑鐨勬枃妗e唴榪涜縐誨姩銆?br />鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.宸︾Щ瀛楃聽宸︾澶撮敭聽灝嗗厜鏍囧悜宸︾Щ鍔ㄤ竴涓瓧絎︺備粎鍦?NET聽Framework聽璁捐鍣ㄤ腑鍙敤銆偮?br />緙栬緫.鍙崇Щ瀛楃聽鍙崇澶撮敭聽灝嗗厜鏍囧悜鍙崇Щ鍔ㄤ竴涓瓧絎︺備粎鍦?NET聽Framework聽璁捐鍣ㄤ腑鍙敤聽
緙栬緫.鏂囨。緇撳熬聽CTRL聽+聽END聽灝嗘彃鍏ョ偣縐誨姩鍒版枃妗g殑鏈鍚庝竴琛屻偮?br />緙栬緫.鏂囨。寮濮嬄燙TRL聽+聽HOME聽灝嗘彃鍏ョ偣縐誨姩鍒版枃妗i琛屻偮?br />緙栬緫.杞埌聽CTRL聽+聽G聽鏄劇ず鈥滆漿鍒拌鈥濆璇濇銆偮?br />緙栬緫.杞埌澶ф嫭鍙仿燙TRL聽+聽]聽灝嗘彃鍏ョ偣縐誨姩鍒版枃妗d腑鐨勪笅涓涓ぇ鎷彿澶勩偮?br />緙栬緫.鍚戜笅縐誨姩涓琛屄犱笅綆ご閿犲皢鍏夋爣涓嬬Щ涓琛屻偮?br />緙栬緫.琛屽熬聽END聽灝嗗厜鏍囩Щ鑷沖綋鍓嶈鐨勭粨灝俱偮?br />緙栬緫.琛岄聽HOME聽灝嗗厜鏍囩Щ鑷沖綋鍓嶈鐨勫紑澶淬偮?br />緙栬緫.鍚戜笂縐誨姩涓琛屄犱笂綆ご閿犲皢鍏夋爣涓婄Щ涓琛屻偮?br />緙栬緫.涓嬩竴涔︾聽CTRL聽+聽K錛孋TRL聽+聽N聽縐誨姩鍒版枃妗d腑涓嬩竴涓功絳懼銆偮?br />緙栬緫.鍚戜笅緲婚〉聽PAGE聽DOWN聽鍦ㄧ紪杈戝櫒紿楀彛涓悜涓嬫粴鍔ㄤ竴灞忋偮?br />緙栬緫.鍚戜笂緲婚〉聽PAGE聽UP聽鍦ㄧ紪杈戝櫒紿楀彛涓悜涓婃粴鍔ㄤ竴灞忋偮?br />緙栬緫.涓婁竴涔︾聽CTRL聽+聽K錛孋TRL聽+聽P聽縐誨姩鍒頒笂涓涔︾銆偮?br />緙栬緫.蹇熶俊鎭燙TRL聽+聽K錛孋TRL聽+聽I聽鍩轟簬褰撳墠璇█鏄劇ず鈥滃揩閫熶俊鎭濄偮?br />緙栬緫.鍚戜笅婊氬姩涓琛屄燙TRL聽+聽涓嬬澶撮敭聽灝嗘枃鏈悜涓嬫粴鍔ㄤ竴琛屻備粎鍦ㄦ枃鏈紪杈戝櫒涓彲鐢ㄣ偮?br />緙栬緫.鍚戜笂婊氬姩涓琛屄燙TRL聽+聽涓婄澶撮敭聽灝嗘枃鏈悜涓婃粴鍔ㄤ竴琛屻備粎鍦ㄦ枃鏈紪杈戝櫒涓彲鐢ㄣ偮?br />緙栬緫.涓嬩竴瀛椔燙TRL聽+聽鍙崇澶撮敭聽灝嗘彃鍏ョ偣鍚戝彸縐誨姩涓涓崟璇嶃偮?br />緙栬緫.涓婁竴瀛椔燙TRL聽+聽宸︾澶撮敭聽灝嗘彃鍏ョ偣鍚戝乏縐誨姩涓涓崟璇嶃偮?br />瑙嗗浘.嫻忚涓嬩竴涓燙TRL聽+聽SHIFT聽+聽1聽瀹氫綅鍒伴」鐨勪笅涓涓畾涔夈佸0鏄庢垨寮曠敤銆傚湪鈥滃璞℃祻瑙堝櫒鈥濆拰鈥滅被瑙嗗浘鈥濈獥鍙d腑鍙敤銆偮?br />瑙嗗浘.嫻忚涓婁竴涓燙TRL聽+聽SHIFT聽+聽2聽瀹氫綅鍒伴」鐨勪笂涓涓畾涔夈佸0鏄庢垨寮曠敤銆傚湪鈥滃璞℃祻瑙堝櫒鈥濆拰鈥滅被瑙嗗浘鈥濈獥鍙d腑鍙敤銆偮?br />

鈥滄枃鏈夋嫨鈥濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鍦ㄦ枃鏈紪杈戝櫒涓敤浜庡湪鎵撳紑鐨勬枃妗d腑閫夋嫨鏂囨湰銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.鍚戝乏鎵╁睍涓涓瓧絎β燬HIFT聽+聽宸︾澶撮敭聽灝嗗厜鏍囧乏縐諱竴涓瓧絎︿互鎵╁睍鎵閫夊唴瀹廣備粎鍦?NET聽Framework聽璁捐鍣ㄤ腑鍙敤銆偮?br />緙栬緫.鍚戝乏鎵╁睍涓涓瓧絎﹀垪聽SHIFT聽+聽ALT聽+聽宸︾澶撮敭聽灝嗗厜鏍囧乏縐諱竴涓瓧絎︿互鎵╁睍鍒楅夋嫨銆偮?br />緙栬緫.鍚戝彸鎵╁睍涓涓瓧絎β燬HIFT聽+聽鍙崇澶撮敭聽灝嗗厜鏍囧彸縐諱竴涓瓧絎︿互鎵╁睍鎵閫夊唴瀹廣備粎鍦?NET聽Framework聽璁捐鍣ㄤ腑鍙敤銆偮?br />緙栬緫.鍚戝彸鎵╁睍涓涓瓧絎﹀垪聽SHIFT聽+聽ALT聽+聽鍙崇澶撮敭聽灝嗗厜鏍囧彸縐諱竴涓瓧絎︿互鎵╁睍鍒楅夋嫨銆偮?br />緙栬緫.鏂囨。緇撳熬鎵╁睍聽CTRL聽+聽SHIFT聽+聽END聽閫夋嫨浠庢彃鍏ョ偣鍒版枃妗f渶鍚庝竴琛岀殑鏂囨湰銆偮?br />緙栬緫.鏂囨。寮濮嬫墿灞暵燙TRL聽+聽SHIFT聽+聽HOME聽閫夋嫨浠庢彃鍏ョ偣鍒版枃妗i琛岀殑鏂囨湰銆偮?br />緙栬緫.鎵╁睍杞埌澶ф嫭鍙仿燙TRL聽+聽SHIFT聽+聽]聽灝嗘彃鍏ョ偣縐誨姩鍒頒笅涓涓ぇ鎷彿澶勪互鎵╁睍閫夊畾鍐呭銆偮?br />緙栬緫.鍚戜笅鎵╁睍涓琛屄燬HIFT聽+聽涓嬬澶撮敭聽浠庢彃鍏ョ偣浣嶇疆寮濮嬶紝灝嗛夊畾鏂囨湰鍚戜笅鎵╁睍涓琛屻偮?br />緙栬緫.鍚戜笅鎵╁睍鍒椔燬HIFT聽+聽ALT聽+聽涓嬬澶撮敭聽灝嗗厜鏍囦笅縐諱竴琛屼互鎵╁睍鍒楃殑閫夊畾鍐呭銆偮?br />緙栬緫.鎵╁睍鍒拌灝韭燬HIFT聽+聽END聽閫夋嫨浠庢彃鍏ョ偣鍒板綋鍓嶈琛屽熬鐨勬枃鏈偮?br />緙栬緫.琛屽熬鎵╁睍鍒椔燬HIFT聽+聽ALT聽+聽END聽灝嗘彃鍏ョ偣縐誨姩鍒拌灝句互鎵╁睍鍒楃殑閫夊畾鍐呭銆偮?br />緙栬緫.鎵╁睍鍒拌棣柭燬HIFT聽+聽HOME聽閫夋嫨浠庢彃鍏ョ偣鍒拌棣栫殑鏂囨湰銆偮?br />緙栬緫.琛岄鎵╁睍鍒椔燬HIFT聽+聽ALT聽+聽HOME聽灝嗘彃鍏ョ偣縐誨埌琛岄浠ユ墿灞曞垪閫夋嫨銆偮?br />緙栬緫.鍚戜笂鎵╁睍涓琛屄燬HIFT聽+聽涓婄澶撮敭聽浠庢彃鍏ョ偣浣嶇疆寮濮嬪悜涓婇愯閫夋嫨鏂囨湰銆偮?br />緙栬緫.鍚戜笂鎵╁睍鍒椔燬HIFT聽+聽ALT聽+聽涓婄澶撮敭聽灝嗗厜鏍囦笂縐諱竴琛屼互鎵╁睍鍒楃殑閫夊畾鍐呭銆偮?br />緙栬緫.鍚戜笅鎵╁睍涓欏德燬HIFT聽+聽PAGE聽DOWN聽灝嗛夊畾鍐呭鍚戜笅鎵╁睍涓欏點偮?br />緙栬緫.鍚戜笂鎵╁睍涓欏德燬HIFT聽+聽PAGE聽UP聽灝嗛夊畾鍐呭鍚戜笂鎵╁睍涓欏點偮?br />緙栬緫.鍏ㄩ壜燙TRL聽+聽A聽閫夋嫨褰撳墠鏂囨。涓殑鎵鏈夊唴瀹廣偮?br />緙栬緫.閫夋嫨褰撳墠瀛椔燙TRL聽+聽W聽閫夋嫨鍖呭惈鎻掑叆鐐圭殑鍗曡瘝錛屾垨鎻掑叆鐐瑰彸渚х殑鍗曡瘝銆偮?br />緙栬緫.閫夋嫨鍒版渶鍚庝竴涓繑鍥灺燙TRL聽+聽=聽閫夋嫨緙栬緫鍣ㄤ腑褰撳墠浣嶇疆鍒扮紪杈戝櫒涓墠涓浣嶇疆涔嬮棿鐨勫唴瀹廣偮?br />緙栬緫.鎵╁睍鍒拌鍥懼簳閮燙TRL聽+聽SHIFT聽+聽PAGE聽DOWN聽灝嗗厜鏍囩Щ鍔ㄥ埌瑙嗗浘涓殑鏈鍚庝竴琛屼互鎵╁睍閫夊畾鍐呭銆偮?br />緙栬緫.鎵╁睍鍒拌鍥鵑《閮燙TRL聽+聽SHIFT聽+聽PAGE聽UP聽灝嗛夊畾鍐呭鎵╁睍鍒板綋鍓嶇獥鍙g殑欏墮儴銆偮?br />緙栬緫.鎵╁睍鍒頒笅涓瀛椔燙TRL聽+聽SHIFT聽+聽鍙崇澶撮敭聽灝嗛夊畾鍐呭鍚戝彸鎵╁睍涓涓崟璇嶇殑浣嶇疆銆偮?br />緙栬緫.鍚戝悗鎵╁睍涓涓瓧鍒椔燙TRL聽+聽SHIFT聽+聽ALT聽+聽鍙崇澶撮敭聽灝嗗厜鏍囧彸縐諱竴涓崟璇嶄互鎵╁睍鍒楅夋嫨銆偮?br />緙栬緫.鎵╁睍鍒頒笂涓瀛椔燙TRL聽+聽SHIFT聽+聽宸︾澶撮敭聽灝嗛夊畾鍐呭鍚戝乏鎵╁睍涓涓崟璇嶇殑浣嶇疆銆偮?br />緙栬緫.鍚戝墠鎵╁睍涓涓瓧鍒椔燙TRL聽+聽SHIFT聽+聽ALT聽+聽宸︾澶撮敭聽灝嗗厜鏍囧乏縐諱竴涓崟璇嶄互鎵╁睍鍒楅夋嫨銆?/font>聽

鈥滄枃鏈搷浣溾濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鍦ㄦ枃鏈紪杈戝櫒涓敤浜庡湪鎵撳紑鐨勬枃妗d腑鍒犻櫎銆佺Щ鍔ㄦ垨鑰呮牸寮忓寲鏂囨湰銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.鍒嗚聽ENTER
SHIFT聽+聽ENTER聽鎻掑叆鏂拌銆偮?br />緙栬緫.瀛楃杞疆聽CTRL聽+聽T聽浜ゆ崲鎻掑叆鐐逛袱杈圭殑瀛楃銆備緥濡傦紝AC|聽BD聽鍙樻垚聽AB|聽CD銆備粎鍦ㄦ枃鏈紪杈戝櫒涓彲鐢ㄣ偮?br />緙栬緫.娓呴櫎涔︾聽CTRL聽+聽K錛孋TRL聽+聽L聽縐婚櫎褰撳墠鏂囨。涓墍鏈夋湭鍛藉悕鐨勪功絳俱偮?br />緙栬緫.鎶樺彔鍒板畾涔壜燙TRL聽+聽M錛孋TRL聽+聽O聽鑷姩紜畾鍦ㄤ唬鐮佷腑鍒涘緩鍖哄煙鐨勯昏緫杈圭晫錛堝榪囩▼錛夛紝鐒跺悗闅愯棌瀹冧滑銆偮?br />緙栬緫.娉ㄩ噴閫夊畾鍐呭聽CTRL聽+聽K錛孋TRL聽+聽C聽浣跨敤緙栫▼璇█鐨勬紜敞閲婅娉曞皢浠g爜鐨勫綋鍓嶈鏍囪涓烘敞閲娿偮?br />緙栬緫.瀹屾垚鍗曡瘝聽ALT聽+聽鍙崇澶撮敭
CTRL聽+聽絀烘牸閿犳樉紺哄熀浜庡綋鍓嶈璦鐨勨滃畬鏁村崟璇嶁濄偮?br />緙栬緫.鍒犻櫎聽DELETE聽鍒犻櫎鍏夋爣鍙充晶鐨勪竴涓瓧絎︺偮?br />緙栬緫.鍚戝悗鍒犻櫎聽BACKSPACE
SHIFT聽+聽BACKSPACE聽鍒犻櫎鍏夋爣宸︿晶鐨勪竴涓瓧絎︺偮?br />緙栬緫.鍒犻櫎姘村鉤絀虹櫧聽CTRL聽+聽K錛孋TRL聽+聽\聽鎶樺彔閫夊畾鍐呭涓殑絀虹櫧錛屽鏋滄病鏈夐夊畾鍐呭錛屽垯鍒犻櫎涓庡厜鏍囩浉閭葷殑絀虹櫧銆偮?br />緙栬緫.緙栨帓鏂囨。鏍煎紡聽CTRL聽+聽K錛孋TRL聽+聽D聽鎸夌収鈥滈夐」鈥濆璇濇鈥滄枃鏈紪杈戝櫒鈥濋儴鍒嗕腑璇█鐨勨滄牸寮忚緗濈獥鏍間笂鎸囧畾鐨勮緗紝瀵硅璦搴旂敤緙╄繘鍜岀┖鏍兼牸寮忚緗偮?br />緙栬緫.鏍煎紡鍖栭夊畾鍐呭聽CTRL聽+聽K錛孋TRL聽+聽F聽鏍規嵁鍛ㄥ洿鐨勪唬鐮佽錛屾紜緝榪涢夊畾鐨勪唬鐮佽銆偮?br />緙栬緫.闅愯棌閫夊畾鍐呭聽CTRL聽+聽M錛孋TRL聽+聽H聽闅愯棌閫夊畾鏂囨湰銆備俊鍙峰浘鏍囨爣璁伴殣钘忔枃鏈湪鏂囦歡涓殑浣嶇疆銆偮?br />緙栬緫.鎻掑叆鍒惰〃絎β燭AB聽灝嗘枃鏈緙╄繘鎸囧畾鏁伴噺鐨勭┖鏍鹼紝濡偮?聽涓偮?br />緙栬緫.鍓垏琛屄燙TRL聽+聽L聽灝嗘墍鏈夐夊畾鐨勮鍓垏鍒扳滃壀璐存澘鈥濓紝鑻ュ皻鏈夊畾浠諱綍鍐呭錛屽垯灝嗗綋鍓嶈鍓垏鍒板壀璐存澘銆偮?br />緙栬緫.鍒犻櫎琛屄燙TRL聽+聽SHIFT聽+聽L聽鍒犻櫎鎵鏈夐夊畾琛岋紱濡傛灉娌℃湁閫夊畾琛岋紝鍒欏垹闄ゅ綋鍓嶈銆偮?br />緙栬緫.涓婂紑鏂拌聽CTRL聽+聽ENTER聽鍦ㄦ彃鍏ョ偣涔嬩笂鎻掑叆涓涓┖琛屻偮?br />緙栬緫.涓嬪紑鏂拌聽CTRL聽+聽SHIFT聽+聽ENTER聽鍦ㄦ彃鍏ョ偣涔嬩笅鎻掑叆涓涓┖琛屻偮?br />緙栬緫.琛岃漿緗燬HIFT聽+聽ALT聽+聽T聽灝嗗寘鍚彃鍏ョ偣鐨勮縐誨姩鍒頒笅涓琛屼箣涓嬨偮?br />緙栬緫.杞崲涓哄皬鍐櫬燙TRL聽+聽U聽灝嗛夊畾鏂囨湰鏇存敼涓哄皬鍐欏瓧絎︺偮?br />緙栬緫.杞崲涓哄ぇ鍐櫬燙TRL聽+聽SHIFT聽+聽U聽灝嗛夊畾鏂囨湰鏇存敼涓哄ぇ鍐欏瓧絎︺偮?br />緙栬緫.鏀瑰啓妯″紡聽INSERT聽鍦ㄦ彃鍏ュ拰鏀瑰啓鎻掑叆妯″紡涔嬮棿鍒囨崲銆備粎鍦ㄤ嬌鐢ㄦ枃鏈紪杈戝櫒鏃跺彲鐢ㄣ偮?br />緙栬緫.鍋滄闅愯棌褰撳墠鍖哄煙聽CTRL聽+聽M錛孋TRL聽+聽U聽縐婚櫎褰撳墠閫夊畾鍖哄煙鐨勫ぇ綰叉樉紺轟俊鎭偮?br />緙栬緫.鍋滄澶х翰鏄劇ず聽CTRL聽+聽M錛孋TRL聽+聽P聽浠庢暣涓枃妗d腑縐婚櫎鎵鏈夊ぇ綰叉樉紺轟俊鎭偮?br />緙栬緫.浜ゆ崲瀹氫綅鐐孤燙TRL聽+聽R錛孋TRL聽+聽P聽浜ゆ崲褰撳墠閫夊畾鍐呭鐨勫畾浣嶇偣涓庣粨鏉熺偣銆偮?br />緙栬緫.宸︾緝榪浡燬HIFT聽+聽TAB聽灝嗛夊畾琛屽乏縐諱竴涓埗琛ㄤ綅銆偮?br />緙栬緫.鍒囨崲鎵鏈夊ぇ綰叉樉紺郝燙TRL聽+聽M錛孋TRL聽+聽L聽鍦ㄩ殣钘忓拰鏄劇ず鐘舵佷箣闂村垏鎹㈡墍鏈変互鍓嶈鏍囪涓洪殣钘忕殑鏂囨湰閮ㄥ垎銆偮?br />緙栬緫.鍒囨崲涔︾聽CTRL聽+聽K錛孋TRL聽+聽K聽鍦ㄥ綋鍓嶈澶勮緗垨縐婚櫎涔︾銆偮?br />緙栬緫.鍒囨崲澶х翰鏄劇ず灞曞紑聽CTRL聽+聽M錛孋TRL聽+聽M聽鍦ㄩ殣钘忓拰鏄劇ず鐘舵佷箣闂村垏鎹㈠綋鍓嶉夊畾鐨勯殣钘忔枃鏈儴鍒嗐偮?br />緙栬緫.鍒囨崲浠誨姟鍒楄〃蹇嵎鏂瑰紡聽CTRL聽+聽K錛孋TRL聽+聽H聽鍦ㄥ綋鍓嶈澶勮緗垨縐婚櫎蹇嵎鏂瑰紡銆偮?br />緙栬緫.鍒囨崲鑷姩鎹㈣聽CTRL聽+聽R錛孋TRL聽+聽R聽鍚敤鎴栫鐢ㄧ紪杈戝櫒涓殑鑷姩鎹㈣銆偮?br />緙栬緫.鍙栨秷娉ㄩ噴閫夊畾鍐呭聽CTRL聽+聽K錛孋TRL聽+聽U聽浠庝唬鐮佺殑褰撳墠琛屼腑縐婚櫎娉ㄩ噴璇硶銆偮?br />緙栬緫.鏌ョ湅絀虹櫧聽CTRL聽+聽R錛孋TRL聽+聽W聽鏄劇ず鎴栭殣钘忕┖鏍煎拰鍒惰〃絎︽爣璁般偮?br />緙栬緫.瀛楀垹闄ょ洿鑷崇粨灝懼聽CTRL聽+聽DELETE聽鍒犻櫎鎻掑叆鐐瑰彸渚х殑鍗曡瘝銆偮?br />緙栬緫.瀛楀垹闄ょ洿鑷沖紑濮嬪聽CTRL聽+聽BACKSPACE聽鍒犻櫎鎻掑叆鐐瑰乏渚х殑鍗曡瘝銆偮?br />緙栬緫.瀛楄漿緗燙TRL聽+聽SHIFT聽+聽T聽瀵硅皟鎻掑叆鐐逛袱杈圭殑鍗曡瘝銆備緥濡傦紝|聽End聽Sub聽灝嗘洿鏀逛負璇誨彇聽Sub聽End|銆偮?br />
鈥滅獥鍙g鐞嗏濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鍦ㄥ伐鍏峰拰鏂囨。紿楀彛涓敤浜庤繘琛岀Щ鍔ㄣ佸叧闂垨瀵艱埅銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
瑙嗗浘.鍏ㄥ睆聽SHIFT聽+聽ALT聽+聽ENTER聽鍦ㄦ墦寮鍜屽叧闂箣闂村垏鎹⑩滃叏灞忊濇ā寮忋偮?br />瑙嗗浘.鍚戝悗瀹氫綅聽CTRL聽+聽-聽榪斿洖鍒板鑸巻鍙茶褰曚腑鐨勪笂涓涓枃妗f垨紿楀彛銆偮?br />瑙嗗浘.鍚戝墠瀹氫綅聽CTRL聽+聽SHIFT聽+聽-聽鍚戝墠縐誨姩鍒板鑸巻鍙茶褰曚腑鐨勪笅涓涓枃妗f垨紿楀彛銆偮?br />紿楀彛.嬋媧繪枃妗g獥鍙B燛SC聽鍏抽棴鑿滃崟鎴栧璇濇錛屽彇娑堟鍦ㄨ繘琛岀殑鎿嶄綔錛屾垨灝嗙劍鐐規斁鍦ㄥ綋鍓嶆枃妗g獥鍙d腑銆偮?br />紿楀彛.鍏抽棴鏂囨。紿楀彛聽CTRL聽+聽F4聽鍏抽棴褰撳墠聽MDI聽瀛愮獥鍙c偮?br />紿楀彛.鍏抽棴宸ュ叿紿楀彛聽SHIFT聽+聽ESC聽鍏抽棴褰撳墠宸ュ叿紿楀彛銆偮?br />紿楀彛.縐誨姩鍒頒笅鎷夋爮聽CTRL聽+聽F2聽緙栬緫鍣ㄥ浜庘滀唬鐮佲濊鍥炬椂灝嗗厜鏍囩Щ鍔ㄥ埌涓嬫媺鏍忋偮?br />紿楀彛.涓嬩竴涓枃妗g獥鍙B燙TRL聽+聽F6
CTRL聽+聽TAB聽閫愪釜紿楀彛鍦板驚鐜氳繃聽MDI聽瀛愮獥鍙c偮?br />紿楀彛.涓嬩竴紿楁牸聽ALT聽+聽F6聽縐誨姩鍒頒笅涓宸ュ叿紿楀彛銆偮?br />紿楀彛.涓嬩竴涓媶鍒嗙獥鏍悸燜6聽縐誨姩鍒板崟涓枃妗g殑鎷嗗垎紿楁牸瑙嗗浘鐨勪笅涓涓獥鏍箋偮?br />紿楀彛.涓嬩竴閫夐」鍗÷燙TRL聽+聽PAGE聽DOWN聽縐誨姩鍒版枃妗f垨紿楀彛涓殑涓嬩竴涓夐」鍗°偮?br />紿楀彛.涓婁竴涓枃妗g獥鍙B燙TRL聽+聽SHIFT聽+聽F6
CTRL聽+聽SHIFT聽+聽TAB聽縐誨姩鍒扮紪杈戝櫒鎴栬璁″櫒涓殑涓婁竴鏂囨。銆偮?br />紿楀彛.涓婁竴紿楁牸聽SHIFT聽+聽ALT聽+聽F6聽縐誨姩鍒頒笂嬈¢夊畾鐨勭獥鍙c偮?br />紿楀彛.涓婁竴涓媶鍒嗙獥鏍悸燬HIFT聽+聽F6聽縐誨姩鍒版媶鍒嗙獥鏍艱鍥句腑鐨勬枃妗g殑涓婁竴涓獥鏍箋偮?br />紿楀彛.涓婁竴閫夐」鍗÷燙TRL聽+聽PAGE聽UP聽縐誨姩鍒版枃妗f垨紿楀彛涓殑涓婁竴涓夐」鍗°?/font>聽

鈥滈泦鎴愬府鍔┾濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬鍦ㄢ滃府鍔┾濅腑鐨勪富棰樹箣闂存煡鐪嬪拰縐誨姩銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
甯姪.鐩綍聽CTRL聽+聽ALT聽+聽F1聽鏄劇ず鍖呭惈鍦燤SDN聽涓殑鏂囨。鐨勨滅洰褰曗濈獥鍙c偮?br />甯姪.鍔ㄦ佸府鍔┞燙TRL聽+聽F1聽鏄劇ず鈥滃姩鎬佸府鍔┾濈獥鍙o紝璇ョ獥鍙f牴鎹駭鍝佷腑褰撳墠鍏鋒湁鐒︾偣鐨勯」鏄劇ず涓嶅悓鐨勪富棰樸偮?br />甯姪.F1甯姪聽F1聽鏄劇ず涓庨夊畾鐨勫綋鍓嶇敤鎴風晫闈㈢浉瀵瑰簲鐨勫府鍔╀富棰樸偮?br />甯姪.绱㈠紩聽CTRL聽+聽ALT聽+聽F2聽鏄劇ず鍖呭惈鍦燤SDN聽涓殑鏂囨。鐨勨滅儲寮曗濈獥鍙c偮?br />甯姪.绱㈠紩緇撴灉聽SHIFT聽+聽ALT聽+聽F2聽鏄劇ず鈥滅儲寮曠粨鏋溾濈獥鍙o紝瀹冨垪鍑哄寘鍚滅儲寮曗濈獥鍙d腑閫夊畾鍏抽敭瀛楃殑涓婚銆偮?br />甯姪.涓嬩竴涓富棰樎燗LT聽+聽涓嬬澶撮敭聽鏄劇ず鐩綍涓殑涓嬩竴涓婚銆備粎鍦ㄢ滃府鍔┾?Web)聽嫻忚鍣ㄧ獥鍙d腑鍙敤銆偮?br />甯姪.涓婁竴涓富棰樎燗LT聽+聽涓婄澶撮敭聽鏄劇ず鐩綍涓殑鍓嶄竴涓婚銆備粎鍦ㄢ滃府鍔┾?Web)聽嫻忚鍣ㄧ獥鍙d腑鍙敤銆偮?br />甯姪.鎼滅儲聽CTRL聽+聽ALT聽+聽F3聽鏄劇ず鈥滄悳绱⑩濈獥鍙o紝璇ョ獥鍙e厑璁稿湪鍖呭惈浜幝燤SDN聽涓殑鏂囨。涓悳绱㈠崟璇嶆垨璇嶇粍銆偮?br />甯姪.鎼滅儲緇撴灉聽SHIFT聽+聽ALT聽+聽F3聽鏄劇ず鈥滄悳绱㈢粨鏋溾濈獥鍙o紝瀹冩樉紺哄寘鍚粠鈥滄悳绱⑩濈獥鍙f悳绱㈢殑瀛楃涓茬殑涓婚鍒楄〃銆偮?br />甯姪.紿楀彛甯姪聽SHIFT聽+聽F1聽鏄劇ず涓庨夊畾鐨勫綋鍓嶇敤鎴風晫闈㈢浉瀵瑰簲鐨勫府鍔╀富棰樸?/font>聽

鈥滃璞℃祻瑙堝櫒鈥濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬鈥滃璞℃祻瑙堝櫒鈥濈獥鍙c?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.鏌ユ壘絎﹀彿聽ALT聽+聽F12聽鏄劇ず鈥滄煡鎵劇鍙封濆璇濇銆偮?br />緙栬緫.杞埌澹版槑聽CTRL聽+聽F12聽鏄劇ず浠g爜涓夊畾絎﹀彿鐨勫畾涔夈偮?br />緙栬緫.杞埌瀹氫箟聽F12聽鏄劇ず浠g爜涓夊畾絎﹀彿鐨勫0鏄庛偮?br />瑙嗗浘.鏌ユ壘絎﹀彿緇撴灉聽CTRL聽+聽ALT聽+聽F12聽鏄劇ず鈥滄煡鎵劇鍙風粨鏋溾濈獥鍙c偮?br />瑙嗗浘.瀵硅薄嫻忚鍣燙TRL聽+聽ALT聽+聽J聽鏄劇ず鈥滃璞℃祻瑙堝櫒鈥濓紝浠ユ煡鐪嬪彲鐢ㄤ簬鍖呯殑綾匯佸睘鎬с佹柟娉曘佷簨浠跺拰甯告暟浠ュ強欏圭洰涓殑瀵硅薄搴撳拰榪囩▼銆偮?br />瑙嗗浘.瀵硅薄嫻忚鍣ㄥ悜鍚幝燗LT聽+聽-聽鍚戝悗縐誨姩鍒扳滃璞℃祻瑙堝櫒鈥濈殑閫夋嫨鍘嗗彶璁板綍涓殑鍓嶄竴閫夊畾瀵硅薄銆偮?br />瑙嗗浘.瀵硅薄嫻忚鍣ㄥ悜鍓嵚燬HIFT聽+聽ALT聽+聽-聽鍚戝墠縐誨姩鍒扳滃璞℃祻瑙堝櫒鈥濈殑閫夋嫨鍘嗗彶璁板綍涓殑涓嬩竴瀵硅薄銆偮?br />
鈥滃畯鈥濆揩鎹烽敭
浣跨敤瀹忔椂鍙嬌鐢ㄤ笅鍒楀揩鎹風粍鍚堥敭銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
瑙嗗浘.瀹忚祫婧愮鐞嗗櫒聽ALT聽+聽F8聽鏄劇ず鈥滃畯璧勬簮綆$悊鍣ㄢ濈獥鍙o紝瀹冨垪鍑哄綋鍓嶈В鍐蟲柟妗堜腑鎵鏈夊彲鐢ㄧ殑瀹忋偮?br />宸ュ叿.瀹廔DE聽ALT聽+聽F11聽鍚姩鈥淰isual聽Studio聽瀹忊?>鈥滃畯聽IDE鈥濄偮?br />宸ュ叿.璁板綍涓存椂瀹徛燙TRL聽+聽SHIFT聽+聽R聽灝嗙幆澧冪疆浜庘滃畯鈥濊褰曟ā寮忋偮?br />宸ュ叿.榪愯涓存椂瀹徛燙TRL聽+聽SHIFT聽+聽P聽鍥炴斁璁板綍鐨勫畯銆偮?br />
鈥滃伐鍏風獥鍙b濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿厑璁告樉紺虹壒瀹氱殑宸ュ叿紿楀彛銆?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
宸ュ叿.鍛戒護紿楀彛鏍囪妯″紡聽CTRL聽+聽SHIFT聽+聽M聽灝嗏滃懡浠も濈獥鍙g疆浜庢煇縐嶆ā寮忎笅錛屼互鍏佽鍦ㄧ獥鍙d腑閫夋嫨鏂囨湰銆偮?br />瑙嗗浘.綾昏鍥韭燙TRL聽+聽SHIFT聽+聽C聽鏄劇ず鈥滅被瑙嗗浘鈥濈獥鍙c偮?br />瑙嗗浘.鍛戒護紿楀彛聽CTRL聽+聽ALT聽+聽A聽鏄劇ず鈥滃懡浠も濈獥鍙o紝瀹冨厑璁告偍閿叆鎿嶄綔聽IDE聽鐨勫懡浠ゃ偮?br />瑙嗗浘.鏂囨。澶х翰聽CTRL聽+聽ALT聽+聽T聽鏄劇ず鈥滄枃妗eぇ綰測濈獥鍙o紝浠ユ煡鐪嬪綋鍓嶆枃妗g殑騫抽潰鎴栧眰嬈″ぇ綰層偮?br />瑙嗗浘.鏀惰棌澶孤燙TRL聽+聽ALT聽+聽F聽鏄劇ず鈥滄敹钘忓す鈥濈獥鍙o紝璇ョ獥鍙e垪鍑轟簡聽Web聽欏電殑蹇嵎鏂瑰紡銆偮?br />瑙嗗浘.杈撳嚭聽CTRL聽+聽ALT聽+聽O聽鏄劇ず鈥滆緭鍑衡濈獥鍙d互鍦ㄨ繍琛屾椂鏌ョ湅鐘舵佹秷鎭偮?br />瑙嗗浘.灞炴х獥鍙B燜4聽鏄劇ず鈥滃睘鎬р濈獥鍙o紝璇ョ獥鍙e垪鍑哄綋鍓嶉夊畾欏圭殑璁捐鏃跺睘鎬у拰浜嬩歡銆偮?br />瑙嗗浘.灞炴ч〉聽SHIFT聽+聽F4聽鏄劇ず褰撳墠閫夊畾欏圭殑灞炴ч〉銆偮?br />瑙嗗浘.璧勬簮瑙嗗浘聽CTRL聽+聽SHIFT聽+聽E聽鏄劇ず鈥滆祫婧愯鍥鋸濈獥鍙c偮?br />瑙嗗浘.鏈嶅姟鍣ㄨ祫婧愮鐞嗗櫒聽CTRL聽+聽ALT聽+聽S聽鏄劇ず鈥滄湇鍔″櫒璧勬簮綆$悊鍣ㄢ濈獥鍙o紝璇ョ獥鍙e厑璁告煡鐪嬪茍鎿嶄綔鏁版嵁搴撴湇鍔″櫒銆佷簨浠舵棩蹇椼佹秷鎭槦鍒椼乄eb聽鏈嶅姟鍜岃澶氬叾浠栫殑鎿嶄綔緋葷粺鏈嶅姟銆偮?br />瑙嗗浘.鏄劇ずWeb嫻忚鍣燙TRL聽+聽ALT聽+聽R聽鏄劇ず鈥淲eb聽嫻忚鍣ㄢ濈獥鍙o紝瀹冨厑璁告偍鏌ョ湅聽Internet聽涓婄殑欏甸潰銆偮?br />瑙嗗浘.瑙e喅鏂規璧勬簮綆$悊鍣燙TRL聽+聽ALT聽+聽L聽鏄劇ず鈥滆В鍐蟲柟妗堣祫婧愮鐞嗗櫒鈥濓紝瀹冨垪鍑哄綋鍓嶈В鍐蟲柟妗堜腑鐨勯」鐩拰鏂囦歡銆偮?br />瑙嗗浘.浠誨姟鍒楄〃聽CTRL聽+聽ALT聽+聽K聽鏄劇ず鈥滀換鍔″垪琛ㄢ濈獥鍙o紝鍦ㄦ鑷畾涔夈佸垎綾誨拰綆$悊浠誨姟銆佹敞閲娿佸揩鎹鋒柟寮忋佽鍛婂拰閿欒淇℃伅銆偮?br />瑙嗗浘.宸ュ叿綆甭燙TRL聽+聽ALT聽+聽X聽鏄劇ず鈥滃伐鍏風鈥濓紝瀹冨寘鍚彲鍖呮嫭鍦ㄤ唬鐮佷腑鎴栦笌浠g爜涓璧蜂嬌鐢ㄧ殑鎺т歡鍜屽叾浠栭」銆偮?br />
鈥滈」鐩濆揩鎹烽敭
涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬鍚戦」鐩腑娣誨姞鏂伴」錛岀敓鎴愰」鐩紝鎴栬呮墦寮鏂囦歡鎴栭」鐩?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
鐢熸垚.鐢熸垚瑙e喅鏂規聽CTRL聽+聽SHIFT聽+聽B聽鐢熸垚瑙e喅鏂規銆偮?br />鐢熸垚.緙栬瘧聽CTRL聽+聽F7聽鍒涘緩涓涓璞℃枃浠訛紝鍦ㄥ叾涓寘鍚夊畾鏂囦歡鐨勬満鍣ㄧ爜銆侀摼鎺ュ櫒鎸囦護銆佽妭銆佸閮ㄥ紩鐢ㄤ互鍙婂嚱鏁板悕鎴栨暟鎹悕銆偮?br />鏂囦歡.娣誨姞鐜版湁欏孤燬HIFT聽+聽ALT聽+聽A聽鏄劇ず鈥滄坊鍔犵幇鏈夐」鈥濆璇濇錛岃瀵硅瘽妗嗕嬌鎮ㄥ彲浠ュ皢鐜版湁鏂囦歡娣誨姞鍒板綋鍓嶉」鐩偮?br />鏂囦歡.娣誨姞鏂伴」聽CTRL聽+聽SHIFT聽+聽A聽鏄劇ず鈥滄坊鍔犳柊欏光濆璇濇錛岃瀵硅瘽妗嗗厑璁稿悜褰撳墠鐨勯」鐩坊鍔犳柊鏂囦歡銆偮?br />鏂囦歡.鏂板緩鏂囦歡聽CTRL聽+聽N聽鏄劇ず鈥滄柊寤烘枃浠垛濆璇濇錛屽湪姝ゅ彲浠ラ夋嫨瑕佹坊鍔犲埌褰撳墠欏圭洰涓殑鏂版枃浠躲偮?br />鏂囦歡.鏂板緩欏圭洰聽CTRL聽+聽SHIFT聽+聽N聽鏄劇ず鈥滄柊寤洪」鐩濆璇濇錛屽湪姝ゅ彲鍒涘緩欏圭洰騫跺皢鍏舵坊鍔犲埌褰撳墠瑙e喅鏂規銆偮?br />鏂囦歡.鎵撳紑鏂囦歡聽CTRL聽+聽O聽鏄劇ず鈥滄墦寮鏂囦歡鈥濆璇濇錛屽湪姝ゅ彲閫夋嫨瑕佹墦寮鐨勭幇鏈夋枃浠躲偮?br />鏂囦歡.鎵撳紑欏圭洰聽CTRL聽+聽SHIFT聽+聽O聽鏄劇ず鈥滄墦寮欏圭洰鈥濆璇濇錛屽湪姝ゅ彲灝嗙幇鏈夐」鐩坊鍔犲埌瑙e喅鏂規銆偮?br />欏圭洰.閲嶅啓聽CTRL聽+聽ALT聽+聽INSERT聽鍏佽鍦ㄦ淳鐢熺被涓噸鍐欏熀綾繪柟娉曘傜敤浜幝燙#銆偮?br />
鏉傞」緙栬緫鍣ㄧ殑蹇嵎閿?br />涓嬪垪蹇嵎緇勫悎閿彲鐢ㄤ簬蹇嵎閿紪杈戝櫒鎴栧瓧絎︿覆緙栬緫鍣ㄣ?br />
鍛戒護鍚嵚犲揩鎹烽敭聽璇存槑聽
緙栬緫.鏂板緩蹇嵎閿營NSERT聽娣誨姞涓涓柊鐨勫揩鎹烽敭欏廣備粎鍦ㄥ揩鎹烽敭緙栬緫鍣ㄤ腑鍙敤銆偮?br />緙栬緫.鏂板緩瀛楃涓猜營NSERT聽鍦ㄥ瓧絎︿覆琛ㄤ腑娣誨姞鏂扮殑欏廣備粎鐢ㄤ簬瀛楃涓茬紪杈戝櫒銆偮?br />
http://blog.csdn.net/qdzx2008/archive/2005/09/27/490880.aspx

]]>
Visual Studio 2005涓紪璇戣皟璇曟柊鍔熻兘 http://www.shnenglu.com/mzty/archive/2006/04/26/6304.html姊﹀湪澶╂動姊﹀湪澶╂動Wed, 26 Apr 2006 04:42:00 GMThttp://www.shnenglu.com/mzty/archive/2006/04/26/6304.htmlhttp://www.shnenglu.com/mzty/comments/6304.htmlhttp://www.shnenglu.com/mzty/archive/2006/04/26/6304.html#Feedback0http://www.shnenglu.com/mzty/comments/commentRss/6304.htmlhttp://www.shnenglu.com/mzty/services/trackbacks/6304.htmlhttp://blog.csdn.net/qdzx2008/archive/2006/01/03/569462.aspx

鍘熸枃鍦板潃錛?a target="_blank">http://jackyrong.cnblogs.com/archive/2005/11/15/277119.html

鍦ㄦ棩甯哥殑緙栫▼涓紝紼嬪簭鍛樼粡甯哥涓嶅紑鐨勫伐浣滀箣涓錛屽氨鏄皟璇曘傚綋鍐欏ソ涓孌典唬鐮佹垨紼嬪簭鍚庯紝鍦ㄨ繍琛屽悗鎬諱細鍑虹幇榪欐牱閭f牱鐨勯棶棰橈紝姣斿鍚勬牱鐨勯敊璇紝紼嬪簭鍛樺氨蹇呴』榪涜璋冭瘯錛屽皢榪欎簺閿欒鎺掗櫎銆傚湪鏈鏂板嚭鐐夌殑Visual聽Studio聽2005涓紝灝嗘彁渚涘崄鍒嗗己澶ц屾柟渚跨殑璋冭瘯鍔熻兘錛屼粠鑰屼嬌紼嬪簭鍛樿兘鑺傜害鏃墮棿錛屾彁楂樺伐浣滄晥鐜囥傛湰鏂囦腑錛屽皢涓昏浠嬬粛Visual聽Studio聽2005聽鍦ㄨ皟璇曟柟闈㈡柊澧炲姞鐨勫嚑涓噸瑕佸姛鑳斤紝騫朵粙緇嶅畠浠殑綆鍗曠敤娉曘?br />銆銆
銆銆Edit聽and聽Contiue鍔熻兘

銆銆鍦ㄨ皟璇曠▼搴忕殑鏃跺欙紝緇忓父浼氶亣鍒拌繖鏍風殑鎯呭喌錛氬湪璋冭瘯涓澶ф浠g爜鏃訛紝閬囧埌浜嗕竴涓皬鐨勯敊璇紝姣斿鍙傛暟鐨勮祴鍊奸敊璇簡錛岃繖鏃跺欙紝寰寰甯屾湜鑳藉椹笂灝嗚繖浜涘皬鐨勯敊璇敼姝h繃鏉ュ悗錛岃兘澶熺戶緇皟璇曡窡韙笅鍘伙紝鑰屼笉鐢ㄧ粨鏉熸暣涓皟璇曡繃紼嬪幓淇敼銆傚湪Visual聽Studio聽2003涓紝鎴戜滑蹇呴』鍋滄褰撳墠鐨勮皟璇曪紝淇敼閿欒鐨勫湴鏂癸紝鍐嶉噸鏂扮紪璇戯紝榪欐牱鍗佸垎涓嶆柟渚褲傚湪Visual聽Studio聽2005聽涓紝鎻愪緵浜嗕竴涓柊鐨勫姛鑳藉彨"edit聽and聽continue"錛屾剰鎬濇槸璇達紝褰撲綘鍦ㄨ皟璇曟椂錛岄亣鍒板皬鐨勯敊璇渶瑕侀┈涓婁慨鏀瑰悗錛屽彲浠ヨ繘琛岀紪杈戜慨鏀癸紝鐒跺悗緇х畫寰涓嬭皟璇曪紝涓嶉渶瑕佺粨鏉熸暣涓皟璇曠殑榪囩▼錛屽綋浣犱慨鏀瑰悗錛岃皟璇曞櫒鍦ㄥ悗鍙拌繘琛屼簡鑷姩鐨勭紪璇戯紝騫朵笖浼氭墽琛屾柊淇敼鐨勪唬鐮侊紝鍗佸垎鏂逛究銆備笅闈婦涓緥瀛愯繘琛岃鏄庛偮?br />
銆銆鎵撳紑Visual聽Studio聽2005,浣跨敤c#寤虹珛涓涓獁inform紿椾綋搴旂敤紼嬪簭錛屽湪紿椾綋涓坊鍔犱竴涓猯abel鏍囩錛屼竴涓枃鏈錛屼竴涓寜閽紝濡備笅鍥炬墍紺猴紝鎴戜滑瑕佸疄鐜扮殑鍔熻兘鏄紝鍦ㄦ枃鏈杈撳叆涓浜涗俊鎭悗錛岀偣鎸夐挳錛屼細寮瑰嚭涓涓秷鎭錛屾樉紺虹殑鏄垰鎵嶈緭鍏ョ殑淇℃伅銆?br />聽聽聽聽
鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

聽鍋囧鎴戜滑緙栧啓鐨勪唬鐮佸涓嬫墍紺猴紝鍑虹幇浜嗕竴涓皬閿欒錛屾妸textbox1.text鐨勫唴瀹瑰綋浣滃瓧絎︿覆鐨勪竴閮ㄥ垎浜嗭紝鎵浠ユ樉紺轟笉鍑虹敤鎴瘋緭鍏ョ殑淇℃伅銆?br />

紼嬪簭浠g爜錛?/td>[ 澶嶅埗浠g爜鍒板壀璐存澘 ]
private聽void聽button1_Click(object聽sender,聽EventArgs聽e)
{
銆//Show聽welcome聽message
銆MessageBox.Show("Welcome聽textbox1.Text聽to聽Edit聽and聽Continue.");
}聽



鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖
鐜板湪錛屽鏋滄垜浠湪璋冭瘯鏃墮亣鍒頒簡榪欎釜閿欒錛屽垯鍙互浣跨敤edit聽and聽continue鍔熻兘鏉ヨ繘琛屾敼姝c?br />
銆銆棣栧厛錛屾寜F7鍒囨崲鍒頒唬鐮佽鍥撅紝鍦∕essageBox.Show榪欎竴琛岃緗柇鐐癸紝涔嬪悗鎸塅5榪愯紼嬪簭錛屽綋鍦ㄦ枃鏈杈撳叆瀛楃涓叉椂錛岀敱浜庤緗簡涓柇錛屽厜鏍囧仠鐣欏湪messagebox.show榪欒涓婏紝榪欐椂錛屾垜浠彲浠ヤ慨鏀逛唬鐮侊紝淇敼涓猴細
private聽void聽button1_Click(object聽sender,聽EventArgs聽e)
{
銆MessageBox.Show("Welcome聽"聽+聽textbox1.Text聽+"聽to聽Edit聽and聽Continue.");
}聽

銆銆淇敼瀹屽悗錛岀戶緇寜F5榪愯錛岃繖鏃跺欙紝鍒欎細鏄劇ず姝g‘鐨勭粨鏋滀簡錛屽涓嬪浘錛岃屼笉闇瑕佷嬌鐢ㄤ互寰鐨?stop聽debugging"鐨勫姛鑳藉厛鍋滄璋冭瘯鍐嶄慨鏀圭▼搴忋?br />鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

聽鍙鍖栬皟璇曞櫒(Debugging聽Visualizers)

銆銆鍦ㄨ皟璇曠殑鏃跺欙紝鎴戜滑閬囧埌鐨勪竴涓緢楹葷儲鐨勯棶棰橈紝灝辨槸鏈夌殑鏃跺欏緢闅劇湅鍒版煇浜涘弬鏁扮殑鍊箋傛瘮濡傚綋浣犺緗簡涓涓柇鐐瑰幓鐩戞祴涓涓猟ataset,騫朵笖鎯崇湅dataset閲岀殑姣忎釜datatable鐨勬暟鎹紝榪欏湪Visual聽Studio聽2003涓紝鏄崄鍒嗛夯鐑︾殑錛屽繀欏誨湪auto/locals鐨勭洃瑙嗙獥鍙d腑錛屼竴灞傚眰鍦板睍寮鍘葷湅鍏跺箋傚湪Visual聽Studio聽2005涓紝涓鴻В鍐寵繖涓棶棰橈紝鏂板鍔犱簡鍙?debugging聽visualizers"(鍙鍖栬皟璇曞櫒)鐨勫姛鑳斤紝璇ュ姛鑳藉彲浠ュ湪璋冭瘯鐘舵佹椂錛屽緢瀹規槗鏂逛究鍦頒互鍚勭被褰㈠紡錛屾瘮濡傛枃鏈?html,xml絳夋柟寮忔煡鐪嬪悇縐嶅弬鏁般?br />
銆銆鍦ㄥ悇綾葷殑鐩戣紿楀彛涓紝姣斿鍦╝utos,locals,watch鍜宷uickwatch聽涓兘鍙互璋冪敤鍙鍖栬皟璇曞櫒,鏂規硶鏄湪鏌愪釜闇瑕佺洃瑙嗙殑鍙傛暟鏃佽竟錛岀偣鍑婚偅涓斁澶ч暅鍥炬爣錛屽氨鍙互鍦ㄦ墦寮鐨勫彲瑙嗗寲璋冭瘯鍣ㄤ腑鐪嬪埌璇ュ弬鏁扮殑璇︾粏鎯呭喌錛屽涓嬪浘鎵紺猴細

鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

鍒╃敤鍙鍖栬皟璇曞櫒錛屽氨鍙互寰堟柟渚垮湴鏌ョ湅姣斿dataset綾誨瀷鐨勬暟鎹紝濡備笅鍥炬墍紺猴細

鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

Data聽Tips

銆銆鍦╒isual聽Studio聽2005涓紝鍦ㄨ皟璇曟柟闈紝榪樻柊澧炰簡"data聽tips(鏁版嵁鎻愮ず)"鐨勫姛鑳姐傚綋鍦ㄨ皟璇曠▼搴忔湡闂達紝鍙渶瑕佸皢鍏夋爣縐誨埌浠g爜涓煇涓渶瑕佺洃瑙嗙殑鍙傛暟涓婏紝緋葷粺灝變細鑷姩鏄劇ず涓庤鍙傛暟鐩稿叧鑱旂殑涓浜涘緢鏈夌敤鐨勪俊鎭紝姣斿鐩稿叧鐨勫睘鎬э紝浠ュ強褰撳墠璇ュ弬鏁扮殑鍊箋傚湪Visual聽Studio聽2003涓紝涔熸湁璇ュ姛鑳斤紝浣嗘彁渚涚殑淇℃伅姣旂幇鍦ㄧ殑2005灝戝緢澶氥?br />
銆銆鎴戜滑渚濈劧浠ヤ笂闈?edit聽and聽continue"浣跨敤鐨勪緥瀛愭潵璇存槑銆傛垜浠皢鏂偣璁懼湪MessageBox.Show榪欎竴琛岋紝F5榪愯紼嬪簭錛屽綋鍦ㄦ枃鏈杈撳叆鏂囧瓧騫舵寜紜畾鎸夐挳鍚庯紝紼嬪簭鑷姩涓柇錛岃繖鏃訛紝灝嗗厜鏍囩Щ鍒皌extbox1.text榪欎釜浣嶇疆錛岀郴緇熷氨浼氳皟鐢╠ata聽tips鍔熻兘錛屽涓嬪浘鎵紺烘樉紺哄嚭涓巘extbox鏂囨湰妗嗘帶浠剁浉鍏崇殑涓浜涘睘鎬т互鍙婅繖浜涘睘鎬ф鏃跺搴旂殑鍊箋?br />
鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

聽聽聽鍦╠ata聽tip鐨勫姛鑳戒腑錛岃繕鍙互緇х畫浣跨敤edit聽and聽continue鐨勫姛鑳斤紝鍙渶瑕佸湪闇瑕佺殑鍦版柟榧犳爣鍙抽敭灝卞彲浠ュ脊鍑哄涓嬪浘鐨勮彍鍗曪紝鍙互緙栬緫璇ュ箋?br />
鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

聽聽Exception聽Assistant(寮傚父鍔╂墜)聽

銆銆鍦╒isual聽Studio聽.net聽2003涓紝褰撶▼搴忚繍琛屽嚭鐜板紓甯告椂錛岀郴緇熶細鏄劇ず涓涓紓甯鎬俊鎭璇濇錛岃闂槸鍚﹀仠姝㈢▼搴忔墽琛屾垨緇х畫榪愯紼嬪簭錛屼絾騫舵病鏈夋彁渚涚粰寮鍙戣呮洿澶氱殑鍏充簬寮傚父鐨勪俊鎭傚湪Visual聽Studio聽.net聽2005涓紝鎻愪緵浜喡燛xception聽Assistant(寮傚父鍔╂墜)鐨勬柊鍔熻兘錛屽彲浠ユ樉紺轟赴瀵岀殑鍏充簬寮傚父鏂歸潰鐨勪俊鎭紝甯姪寮鍙戣呰皟璇曪紝濡備笅鍥?br />聽聽聽
鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖
聽鍦ㄤ笂鍥句腑錛屾樉紺虹殑鏄竴涓猻qlException錛屾槸鐢變簬瓚呮椂榪炴帴鑰岄犳垚鐨勩傚湪寮傚父鍔╂墜鐨勭獥鍙d腑,鏄劇ず浜嗗叧浜庤寮傚父鐨勮緇嗕俊鎭紝榪樺彲浠ュ皢榪欎簺淇℃伅澶嶅埗鍒板壀璐寸増涓紝褰撻夋嫨view聽detail鏃訛紝浼氬脊鍑哄涓嬪浘鎵紺虹殑紿楀彛錛岃繘涓姝ユ樉紺哄叧浜庤寮傚父鐨勮緇嗕俊鎭?br />

鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

聽Just聽My聽Code聽Debugging

銆銆鍦ㄨ皟璇曚唬鐮佷腑錛屾垜浠粡甯鎬細閬囧埌榪欐牱鐨勯棶棰橈紝鏈夋椂鎴戜滑寮曠敤浜嗕竴浜涘叾浠栧伐鍏峰寘鎴栬呯被搴擄紙濡侻icrosoft鎻愪緵鐨凟nterprise聽Library錛?鑰屽湪璋冭瘯鏃訛紝鎴戜滑鍏跺疄鏄笉闇瑕佽窡韙皟璇曡繖浜涗唬鐮佺殑錛屽洜涓哄畠浠兘宸茬粡璇佹槑鏄紜殑銆傚湪Visual聽Studio聽2003涓紝澶勭悊榪欑被闂鎴戜滑鐨勬柟娉曚竴鑸槸浣跨敤F10璺寵繃瀹冧滑錛屼絾涓鏃﹀伐紼嬪簽澶х殑璇濓紝榪欐牱鍋氬崄鍒嗛夯鐑︺傚湪Visual聽Studio聽2005涓紝鏂板鍔犱簡Just聽My聽Code聽debugging(JMC)鐨勬柊鐗規э紝鍙互璁╁紑鍙戣呰嚜宸卞畾鍒跺摢浜涗唬鐮佹槸闇瑕佽皟璇曪紝鍝簺浠g爜鏄案榪滀笉闇瑕佽皟璇曠殑錛岃繖鏍峰彲浠ヨ妭鐪佸ぇ閲忕殑鏃墮棿銆?br />
銆銆JMC鍔熻兘鐢變袱鏂歸潰鏉ュ疄鐜般傞鍏堬紝濡傛灉涓涓伐紼嬫槸浠elease鏂瑰紡榪涜緙栬瘧鏋勫緩鐨勮瘽錛堝氨鏄伐紼嬩腑錛屾病鏈塸db鏂囦歡錛夛紝璋冭瘯鍣ㄤ細灝嗗叾璁や負鏄潪鐢ㄦ埛浠g爜錛岄偅涔堝湪璋冭瘯榪愯鏃訛紝灝辨牴鏈笉浼氳繘鍏ヨ宸ョ▼涓繘琛岃皟璇曘傚叾嬈★紝鍙互浣跨敤System.Diagnostics鍛藉悕絀洪棿閲岀殑DebuggerNonUserCodeAttribute灞炴э紝灝嗗叾搴旂敤鍦ㄥ笇鏈涗笉榪涜璋冭瘯鐨勪唬鐮佹涓?br />
銆銆涓嬮潰涓句竴涓緥瀛愭潵璇存槑銆備笅闈㈢殑浠g爜孌典腑錛屾湁涓や釜闈欐佹柟娉昒serCode()鍜孨onUserCode(),鍏朵腑錛屽湪NonUserCode()涓紝鏄簲鐢ㄤ簡DebuggerNonUserCode鐨勫睘鎬э紝榪欒〃鏄庤繖孌典唬鐮佸皢鍦ㄨ皟璇曡繍琛屾椂錛岃皟璇曞櫒涓嶄細榪涘叆鍏朵腑銆傚皢鏂偣璁劇疆鍦ㄥ叾涓殑絎?琛岋紝榪愯紼嬪簭錛岀▼搴忎細鍦ㄧ涓涓猆serCode()閲屼腑鏂紝鐜板湪璇曠潃鐢‵11緇х畫鍗曟璺熻釜錛屼細鍙戠幇緋葷粺鍦ㄨ繘鍏sercode()鏂規硶涓繍琛屽悗錛屽茍娌℃湁榪涘叆鍒癗onUserCode()閲岃繍琛屻?br />
using聽System;
using聽System.Diagnostics;
class聽Program
{
static聽void聽Main(string[]聽args)
{
//聽Step聽into聽F11聽from聽here
UserCode();//聽Place聽break聽point聽on聽this聽line
NonUserCode();
UserCode();
}
static聽void聽UserCode()
{
Console.WriteLine("This聽is聽a聽call聽from聽user聽Code");
}
//聽Attribute聽to聽indicate聽the聽Debugger聽to聽jump
//聽over聽this聽method
[DebuggerNonUserCode]
static聽void聽NonUserCode()
{
Console.WriteLine("This聽is聽a聽call聽fron聽Non聽User聽Code");
}
}聽
緙栬緫鏃跺璞¤瘑鍒?br />
銆銆鍦╒isual聽Studio聽2005涓紝鏂板紩鍏ヤ簡"Object聽Identity聽While聽Debugging"鐨勬蹇碉紝涔熷氨鏄錛岀郴緇熺粰鍦ㄨ皟璇曢樁孌電殑姣忎釜瀵硅薄錛岄兘鍙互璧嬩簣涓涓埆鍚嶏紝鍦ㄨ皟璇曟椂錛岀洿鎺ュ紩鐢ㄨ鍒悕灝卞彲浠ヤ簡銆?br />
銆銆鍋囪鍦ㄨ皟璇曠殑鏃跺欙紝闇瑕佽窡韙瘮濡俤ataset鎴栬卙ashtable絳夊璞★紝榪欎簺瀵硅薄涓寘鍚簡寰堝鍏朵粬鐨勫瓙瀵硅薄錛屽鏋滄兂瀵硅繖浜涙暟閲忎紬澶氱殑瀛愬璞¤繘琛岃窡韙殑璇濓紝灝嗗崄鍒嗛夯鐑︺傚湪Visual聽Studio聽2005涓紝鍙互浣跨敤object聽identity(瀵硅薄鏍囪瘑)鐨勬柟娉曞幓鏍囪姣忎竴涓璞★紝

銆銆姣斿錛屽湪涓涓獁indows搴旂敤紼嬪簭涓紝鍒涘緩浜嗕竴涓猟ataset,騫跺皢鍏剁粦瀹氬埌datagridview涓幓銆傚灝唖ql聽server聽鐨刵orthwind鏁版嵁搴撲腑鐨刼rders鍜宱rderdetail琛ㄤ腑鐨勬暟鎹鍑哄~鍏呭埌dataset閲屽幓錛屽垯鍦ㄨ皟璇曟椂錛岃緗竴涓柇鐐規斁鍦╠ataset閲屽~鍏呬簡鏁版嵁涔嬪悗鐨勯偅琛岋紝榪欐椂錛屽湪鐩戣紿楀彛涓紝榧犳爣灞曞紑this.northwindData榪欎釜dataset錛屽涓嬪浘鎵紺猴紝鎵懼埌orders榪欎釜table錛岀劧鍚庨紶鏍囧彸閿?浼氬脊鍑轟竴涓彍鍗曪紝閫夋嫨鍏朵腑鐨?聽Make聽Object聽ID".

鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

榪欐椂錛屼細灝唎rders榪欎釜鍙傛暟浠?#鐨勫埆鍚嶆柟寮忓懡鍚嶏紙瑙佷笅鍥撅級錛屽茍涓斿湪鏁翠釜搴旂敤紼嬪簭涓紝鍙鍦╠ataset鐨勭敓瀛樻湡錛岄兘鍙互浠?#鐨勬柟寮忚闂畠銆?br />
鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖
涓嬪浘鐨勪唬鐮佹紨紺轟簡濡備綍鍦╥mmediate鐩戣紿楀彛涓紝閫氳繃浣跨敤object聽鏍囪瘑錛屾煡鐪嬫煇涓涓〃涓墍鏈夎褰曠殑鏂規硶銆傝娉ㄦ剰鐨勬槸錛屽繀欏誨皢鍏舵樉寮忕被鍨嬭漿鎹負DataApp.NorthwidDataSet.OrdersDataTable銆傞氳繃浣跨敤object聽鏍囪瘑鐨勫ソ澶勬槸錛屽彲浠ュ湪璋冭瘯闃舵錛屼笉闇瑕佸湪鎻忚堪鏌愪釜鍙傛暟鏃訛紝鍐嶇敤鍐椾綑鐨勫懡鍚嶆柟娉曡〃紺轟簡錛堟瘮濡傚彲浠ョ敤#1鏉ヤ唬鏇縯his.NorthwidDataSet.Orders錛?br />

鎸夋鍦ㄦ柊紿楀彛鎵撳紑鍥劇墖

]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲一区二区三区777| 国产精品美女久久久浪潮软件| 国产人妖伪娘一区91| 久久国内精品自在自线400部| 亚洲自拍另类| 国产在线不卡视频| 久久亚洲色图| 欧美精品一区二区三区久久久竹菊| 亚洲美女精品久久| 亚洲少妇诱惑| 伊人久久大香线| 一区二区三区毛片| 亚洲欧美日韩精品久久久久| 国户精品久久久久久久久久久不卡| 老司机精品视频网站| 91久久国产精品91久久性色| 日韩午夜三级在线| 国产欧美日韩亚洲一区二区三区| 美腿丝袜亚洲色图| 欧美日韩精品一区二区在线播放| 欧美一区二区精品| 麻豆精品视频在线| 欧美亚洲综合另类| 免费不卡中文字幕视频| 午夜精品理论片| 久久一区国产| 亚洲专区一区| 免费亚洲视频| 久久国产视频网| 欧美精品一区二区久久婷婷| 久久久av水蜜桃| 欧美日韩色婷婷| 免播放器亚洲| 国产日韩精品一区二区三区在线 | 欧美久久久久久久| 久久亚洲不卡| 国产精品久久久久久久午夜片| 欧美大片91| 国产日韩亚洲| 亚洲一区二区三区高清 | 欧美日韩国产不卡| 欧美va天堂| 国产亚洲综合精品| 亚洲影院色无极综合| 亚洲人成网站777色婷婷| 欧美一二三区精品| 亚洲欧美精品在线| 欧美日韩你懂的| 亚洲国内在线| 精品成人在线| 久久www成人_看片免费不卡| 性刺激综合网| 国产午夜精品久久久久久久| 亚洲大片在线| 亚洲二区免费| 久久精品一二三区| 久久嫩草精品久久久精品| 国产乱子伦一区二区三区国色天香| 亚洲乱码国产乱码精品精98午夜| 在线国产欧美| 久久偷看各类wc女厕嘘嘘偷窃| 欧美视频免费| 日韩一区二区福利| 宅男噜噜噜66一区二区| 欧美日韩黄色一区二区| 亚洲国产专区校园欧美| 99re6这里只有精品| 欧美精品福利在线| 99在线热播精品免费| 亚洲一区二区三区四区五区午夜| 欧美日韩在线免费观看| 亚洲精品一区在线观看| 亚洲午夜精品久久久久久app| 欧美高清视频在线播放| 亚洲伦伦在线| 久久久之久亚州精品露出| 亚洲免费精品| 亚洲精品一线二线三线无人区| 鲁大师影院一区二区三区| 欧美成人一区二区| 亚洲美女尤物影院| 欧美三日本三级三级在线播放| 一区二区电影免费观看| 欧美在线精品一区| 亚洲黄色片网站| 欧美午夜精品一区| 久久福利毛片| 亚洲欧洲中文日韩久久av乱码| 在线亚洲一区| 亚洲精品影院| 亚洲欧美在线网| 亚洲成色777777女色窝| 欧美日韩一区二区视频在线| 午夜精品美女自拍福到在线 | 韩国美女久久| 免费成年人欧美视频| 中国成人黄色视屏| 葵司免费一区二区三区四区五区| 亚洲乱码国产乱码精品精天堂| 国产精品久久久| 开元免费观看欧美电视剧网站| a91a精品视频在线观看| 久久亚洲影院| 午夜精品久久久久久久久久久久| 亚洲大片在线观看| 国产精品久久97| 欧美不卡在线视频| 欧美一区三区三区高中清蜜桃| 亚洲日韩第九十九页| 久久免费视频网| 亚洲综合国产激情另类一区| 亚洲国产精品成人va在线观看| 国产精品亚洲产品| 欧美精品v日韩精品v国产精品 | 日韩视频免费观看高清在线视频| 久久国产视频网站| 亚洲免费视频观看| 欧美一区激情| 这里只有精品视频| 91久久精品国产91性色| 久热re这里精品视频在线6| 亚洲欧美亚洲| 亚洲少妇最新在线视频| 亚洲黄色成人久久久| 激情成人中文字幕| 国产免费一区二区三区香蕉精| 欧美日韩第一页| 欧美电影免费网站| 美女999久久久精品视频| 久久疯狂做爰流白浆xx| 午夜精品婷婷| 亚洲欧美日韩天堂| 亚洲一区二区在线视频| 亚洲视频免费在线观看| 日韩视频久久| 日韩一区二区精品在线观看| 91久久国产自产拍夜夜嗨| 欧美电影在线播放| 欧美a级理论片| 蜜桃精品一区二区三区| 久久伊人精品天天| 久久免费精品视频| 免费久久精品视频| 噜噜噜在线观看免费视频日韩| 久久久久久亚洲综合影院红桃 | 亚洲视频综合| 一区二区三区日韩欧美| 一区二区欧美在线| 亚洲天堂网在线观看| 亚洲一区精彩视频| 午夜国产精品视频| 久久精品五月| 欧美a级理论片| 亚洲激情二区| 一本色道久久88亚洲综合88| 一区二区三区国产在线| 亚洲永久在线| 欧美综合第一页| 免费观看一区| 欧美日韩国产三区| 国产精品日韩欧美一区| 国产午夜精品全部视频在线播放| 国内一区二区在线视频观看| 亚洲国产成人精品久久久国产成人一区| 国产综合婷婷| 亚洲美女一区| 欧美在线观看www| 欧美成人一区二区三区| 一区二区高清视频在线观看| 午夜亚洲福利| 欧美成年视频| 国产精品爽黄69| 亚洲激情偷拍| 午夜欧美电影在线观看| 欧美暴力喷水在线| 亚洲最新视频在线| 久久久久久久久岛国免费| 欧美精品日日鲁夜夜添| 国产日本欧美一区二区| 亚洲人成绝费网站色www| 亚洲欧美美女| 欧美激情国产日韩| 午夜久久福利| 欧美日韩国产综合视频在线| 国语自产精品视频在线看| 亚洲视频免费在线| 美女诱惑黄网站一区| 亚洲美女色禁图| 免费一级欧美片在线播放| 亚洲高清不卡一区| 午夜免费在线观看精品视频| 欧美精品v国产精品v日韩精品| 黄色成人av| 久久狠狠一本精品综合网| 日韩亚洲综合在线| 免费人成精品欧美精品| 国产真实久久| 欧美专区日韩视频| 亚洲视频在线一区| 欧美精品日韩一区|