Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NET³ÌÐòÐÔÄܵĻù±¾ÒªÁì
 
×÷Õß º®½­¶Àµö »ðÁú¹ûÈí¼þ  ·¢²¼ÓÚ 2014-08-29
  2586  次浏览      27
 

±¾ÎÄ·ÖÏíÁËÐÔÄÜÓÅ»¯µÄһЩ½¨ÒéºÍ˼¿¼£¬±ÈÈç²»Òª¹ýÔçÓÅ»¯¡¢ºÃ¹¤¾ßºÜÖØÒª¡¢ÐÔÄܵĹؼü£¬ÔÚÓÚÄÚ´æ·ÖÅäµÈ¡£¿ª·¢Õß²»ÒªÃ¤Ä¿µÄûÓиù¾ÝµÄÓÅ»¯£¬Ê×Ïȶ¨Î»ºÍ²éÕÒµ½Ôì³É²úÉúÐÔÄÜÎÊÌâµÄÔ­Òòµã×îÖØÒª¡£

Bill Chiles£¨Roslyn±àÒëÆ÷µÄ³ÌÐò¾­Àí)дÁËһƪÎÄÕ¡¶Essential Performance Facts and .NET Framework Tips¡·£¬ÖªÃû²©Ö÷º®½­¶Àµö¶Ô¸ÃÎĽøÐÐÁËÕªÒ룬ÎÄÖзÖÏíÁËÐÔÄÜÓÅ»¯µÄһЩ½¨ÒéºÍ˼¿¼£¬±ÈÈç²»Òª¹ýÔçÓÅ»¯¡¢ºÃ¹¤¾ßºÜÖØÒª¡¢ÐÔÄܵĹؼü£¬ÔÚÓÚÄÚ´æ·ÖÅäµÈ£¬²¢Ö¸³ö¿ª·¢Õß²»ÒªÃ¤Ä¿µÄûÓиù¾ÝµÄÓÅ»¯£¬Ê×Ïȶ¨Î»ºÍ²éÕÒµ½Ôì³É²úÉúÐÔÄÜÎÊÌâµÄÔ­Òòµã×îÖØÒª¡£

È«ÎÄÈçÏ£º

±¾ÎÄÌṩÁËһЩÐÔÄÜÓÅ»¯µÄ½¨Ò飬ÕâЩ¾­ÑéÀ´×ÔÓÚʹÓÃÍйܴúÂëÖØÐ´C# ºÍ VB±àÒëÆ÷£¬²¢ÒÔ±àдC# ±àÒëÆ÷ÖеÄÒ»Ð©ÕæÊµ³¡¾°×÷ΪÀý×ÓÀ´Õ¹Ê¾ÕâЩÓÅ»¯¾­Ñé¡£.NET ƽ̨¿ª·¢Ó¦ÓóÌÐò¾ßÓм«¸ßµÄÉú²úÁ¦¡£.NET ƽ̨ÉÏÇ¿´ó°²È«µÄ±à³ÌÓïÑÔÒÔ¼°·á¸»µÄÀà¿â£¬Ê¹µÃ¿ª·¢Ó¦ÓñäµÃ׿ÓгÉЧ¡£µ«ÊÇÄÜÁ¦Ô½´óÔðÈÎÔ½´ó¡£ÎÒÃÇÓ¦¸ÃʹÓÃ.NET¿ò¼ÜµÄÇ¿´óÄÜÁ¦£¬µ«Í¬Ê±Èç¹ûÎÒÃÇÐèÒª´¦Àí´óÁ¿µÄÊý¾Ý±ÈÈçÎļþ»òÕßÊý¾Ý¿âÒ²ÐèҪ׼±¸¶ÔÎÒÃǵĴúÂë½øÐе÷ÓÅ¡£

ΪʲôÀ´×ÔеıàÒëÆ÷µÄÐÔÄÜÓÅ»¯¾­ÑéÒ²ÊÊÓÃÓÚÄúµÄÓ¦ÓóÌÐò

΢ÈíʹÓÃÍйܴúÂëÖØÐ´ÁËC#ºÍVisual BasicµÄ±àÒëÆ÷£¬²¢ÌṩÁËһЩÁÐеÄAPIÀ´½øÐдúÂ뽨ģºÍ·ÖÎö¡¢¿ª·¢±àÒ빤¾ß£¬Ê¹µÃVisual Studio¾ßÓиü¼Ó·á¸»µÄ´úÂë¸ÐÖªµÄ±à³ÌÌåÑé¡£ÖØÐ´±àÒëÆ÷£¬²¢ÇÒÔÚеıàÒëÆ÷ÉÏ¿ª·¢Visual StudioµÄ¾­ÑéʹµÃÎÒÃÇ»ñµÃÁ˷dz£ÓÐÓõÄÐÔÄÜÓÅ»¯¾­Ñ飬ÕâЩ¾­ÑéÒ²ÄÜÓÃÓÚ´óÐ͵Ä.NETÓ¦Ó㬻òÕßһЩÐèÒª´¦Àí´óÁ¿Êý¾ÝµÄAPPÉÏ¡£Äã²»ÐèÒªÁ˽â±àÒëÆ÷£¬Ò²Äܹ»´ÓC#±àÒëÆ÷µÄÀý×ÓÖеóöÕâЩ¼û½â¡£

Visual StudioʹÓÃÁ˱àÒëÆ÷µÄAPIÀ´ÊµÏÖÁËÇ¿´óµÄÖÇÄܸÐÖª(Intellisense)¹¦ÄÜ£¬Èç´úÂë¹Ø¼ü×Ö×ÅÉ«£¬Óï·¨Ìî³äÁÐ±í£¬´íÎó²¨ÀËÏßÌáʾ£¬²ÎÊýÌáʾ£¬´úÂëÎÊÌâ¼°Ð޸Ľ¨ÒéµÈ£¬ÕâЩ¹¦ÄÜÉîÊÜ¿ª·¢Õß»¶Ó­¡£Visual StudioÔÚ¿ª·¢ÕßÊäÈë»òÕßÐ޸ĴúÂëµÄʱºò£¬»á¶¯Ì¬µÄ±àÒë´úÂëÀ´»ñµÃ¶Ô´úÂëµÄ·ÖÎöºÍÌáʾ¡£

µ±Óû§ºÍApp½øÐн»»¥µÄʱºò£¬Í¨³£Ï£ÍûÈí¼þ¾ßÓкõÄÏìÓ¦ÐÔ¡£ÊäÈë»òÕßÖ´ÐÐÃüÁîµÄʱºò£¬Ó¦ÓóÌÐò½çÃæ²»Ó¦¸Ã±»×èÈû¡£°ïÖú»òÕßÌáʾÄܹ»Ñ¸ËÙÏÔʾ³öÀ´»òÕßµ±Óû§¼ÌÐøÊäÈëµÄʱºòÍ£Ö¹Ìáʾ¡£ÏÖÔÚµÄAppÓ¦¸Ã±ÜÃâÔÚÖ´Ðг¤Ê±¼ä¼ÆËãµÄʱºò×èÈûUIÏ̴߳ӶøÈÃÓû§¸Ð¾õ³ÌÐò²»¹»Á÷³©¡£

»ù±¾ÒªÁì

ÔÚ¶Ô.NET ½øÐÐÐÔÄܵ÷ÓÅÒÔ¼°¿ª·¢¾ßÓÐÁ¼ºÃÏìÓ¦ÐÔµÄÓ¦ÓóÌÐòµÄʱºò£¬Ç뿼ÂÇÒÔÏÂÕâЩ»ù±¾ÒªÁ죺

ÒªÁìÒ»:²»Òª¹ýÔçÓÅ»¯

±àд´úÂë±ÈÏëÏóÖеÄÒª¸´ÔӵĶ࣬´úÂëÐèҪά»¤£¬µ÷ÊÔ¼°ÓÅ»¯ÐÔÄÜ¡£ Ò»¸öÓо­ÑéµÄ³ÌÐòÔ±£¬Í¨³£»á¶Ô×ÔÈ»¶øÈ»µÄÌá³ö½â¾öÎÊÌâµÄ·½·¨²¢±àд¸ßЧµÄ´úÂë¡£ µ«ÊÇÓÐʱºòÒ²¿ÉÄÜ»áÏÝÈë¹ýÔçÓÅ»¯´úÂëµÄÎÊÌâÖС£±ÈÈ磬ÓÐʱºòʹÓÃÒ»¸ö¼òµ¥µÄÊý×é¾Í¹»ÁË£¬·ÇÒªÓÅ»¯³ÉʹÓùþÏ£±í£¬ÓÐʱºò¼òµ¥µÄÖØÐ¼ÆËãһϿÉÒÔ£¬·ÇҪʹÓø´ÔӵĿÉÄܵ¼ÖÂÄÚ´æÐ¹Â©µÄ»º´æ¡£·¢ÏÖÎÊÌâʱ£¬Ó¦¸ÃÊ×ÏȲâÊÔÐÔÄÜÎÊÌâÈ»ºóÔÙ·ÖÎö´úÂë¡£

ÒªÁì¶þ:ûÓÐÆÀ²â£¬±ãÊDz²â

ÆÊÎöºÍ²âÁ¿²»»áÈö»Ñ¡£²âÆÀ¿ÉÒÔÏÔʾCPUÊÇ·ñÂú¸ººÉÔËת»òÕßÊÇ´æÔÚ´ÅÅÌI/O×èÈû¡£²âÆÀ»á¸æËßÄãÓ¦ÓóÌÐò·ÖÅäÁËʲôÑùµÄÒÔ¼°¶à´óµÄÄڴ棬ÒÔ¼°ÊÇ·ñCPU»¨·ÑÁ˺ܶàʱ¼äÔÚÀ¬»ø»ØÊÕÉÏ¡£

Ó¦¸ÃΪ¹Ø¼üµÄÓû§ÌåÑé»òÕß³¡¾°ÉèÖÃÐÔÄÜÄ¿±ê£¬²¢ÇÒ±àд²âÊÔÀ´²âÁ¿ÐÔÄÜ¡£Í¨¹ýʹÓÿÆÑ§µÄ·½·¨À´·ÖÎöÐÔÄܲ»´ï±êµÄÔ­ÒòµÄ²½ÖèÈçÏ£ºÊ¹ÓòâÆÀ±¨¸æÀ´Ö¸µ¼£¬¼ÙÉè¿ÉÄܳöÏÖµÄÇé¿ö£¬²¢ÇÒ±àдʵÑé´úÂë»òÕßÐ޸ĴúÂëÀ´ÑéÖ¤ÎÒÃǵļÙÉè»òÕßÐÞÕý¡£Èç¹ûÎÒÃÇÉèÖÃÁË»ù±¾µÄÐÔÄÜÖ¸±ê²¢ÇÒ¾­³£²âÊÔ£¬¾ÍÄܹ»±ÜÃâһЩ¸Ä±äµ¼ÖÂÐÔÄܵĻØÍË(regression)£¬ÕâÑù¾ÍÄܹ»±ÜÃâÎÒÃÇÀË·Ñʱ¼äÔÚһЩ²»±ØÒªµÄ¸Ä¶¯ÖС£

ÒªÁìÈý:ºÃ¹¤¾ßºÜÖØÒª

ºÃµÄ¹¤¾ßÄܹ»ÈÃÎÒÃÇÄܹ»¿ìËٵĶ¨Î»µ½Ó°ÏìÐÔÄܵÄ×î´óÒòËØ(CPU£¬Äڴ棬´ÅÅÌ)²¢ÇÒÄܹ»°ïÖúÎÒÃǶ¨Î»²úÉúÕâЩƿ¾±µÄ´úÂ롣΢ÈíÒѾ­·¢²¼Á˺ܶàÐÔÄܲâÊÔ¹¤¾ß±ÈÈ磺Visual Studio Profiler,Windows Phone Analysis Tool,ÒÔ¼°PerfView.

PerfViewÊÇÒ»¿îÃâ·ÑÇÒÐÔÄÜÇ¿´óµÄ¹¤¾ß£¬ËûÖ÷Òª¹Ø×¢Ó°ÏìÐÔÄܵÄһЩÉî²ã´ÎµÄÎÊÌâ(´ÅÅÌ I/O£¬GC ʼþ£¬ÄÚ´æ)£¬ºóÃæ»áչʾÕâ·½ÃæµÄÀý×Ó¡£ÎÒÃÇÄܹ»×¥È¡ÐÔÄÜÏà¹ØµÄEvent Tracing for Windows(ETW)ʼþ²¢ÄÜÒÔÓ¦ÓóÌÐò£¬½ø³Ì£¬¶ÑÕ»£¬Ï̵߳ij߶Ȳ鿴ÕâЩÐÅÏ¢¡£PerfViewÄܹ»Õ¹Ê¾Ó¦ÓóÌÐò·ÖÅäÁ˶àÉÙ£¬ÒÔ¼°·ÖÅäÁ˺ÎÖÖÄÚ´æÒÔ¼°Ó¦ÓóÌÐòÖеĺ¯ÊýÒÔ¼°µ÷ÓöÑÕ»¶ÔÄÚ´æ·ÖÅäµÄ¹±Ïס£ÕâЩ·½ÃæµÄϸ½Ú£¬Äú¿ÉÒÔ²é¿´Ëæ¹¤¾ßÏÂÔØ·¢²¼µÄ¹ØÓÚPerfViewµÄ·Ç³£ÏêϸµÄ°ïÖú£¬DemoÒÔ¼°ÊÓÆµ½Ì³Ì£¨±ÈÈçChannel9ÉϵÄÊÓÆµ½Ì³Ì£©

ÒªÁìËÄ£ºËùÓеͼÓëÄÚ´æ·ÖÅäÏà¹Ø

Äã¿ÉÄÜ»áÏ룬±àдÏìÓ¦¼°Ê±µÄ»ùÓÚ.NETµÄÓ¦ÓóÌÐò¹Ø¼üÔÚÓÚ²ÉÓúõÄËã·¨£¬±ÈÈçʹÓÿìËÙÅÅÐòÌæ´úðÅÝÅÅÐò£¬µ«ÊÇʵ¼ÊÇé¿ö²¢²»ÊÇÕâÑù¡£±àдһ¸öÏìÓ¦Á¼ºÃµÄappµÄ×î´óÒòËØÔÚÓÚÄÚ´æ·ÖÅä£¬ÌØ±ðÊǵ±app·Ç³£´ó»òÕß´¦Àí´óÁ¿Êý¾ÝµÄʱºò¡£

ÔÚʹÓÃеıàÒëÆ÷API¿ª·¢ÏìÓ¦Á¼ºÃµÄIDEµÄʵ¼ùÖУ¬´ó²¿·Ö¹¤×÷¶¼»¨ÔÚÁËÈçºÎ±ÜÃ⿪±ÙÄÚ´æÒÔ¼°¹ÜÀí»º´æ²ßÂÔ¡£PerfView×·×ÙÏÔʾеÄC# ºÍVB±àÒëÆ÷µÄÐÔÄÜ»ù±¾ÉϺÍCPUµÄÐÔÄÜÆ¿¾±Ã»ÓйØÏµ¡£±àÒëÆ÷ÔÚ¶ÁÈë³É°ÙÉÏǧÉõÖÁÉÏÍòÐдúÂ룬¶ÁÈëÔªÊý¾Ý»î×ŲúÉú±àÒëºÃµÄ´úÂ룬ÕâЩ²Ù×÷Æäʵ¶¼ÊÇI/O bound Ãܼ¯ÐÍ¡£UIÏ̵߳ÄÑÓ³Ù¼¸ºõÈ«²¿¶¼ÊÇÓÉÓÚÀ¬»ø»ØÊÕµ¼Öµġ£.NET¿ò¼Ü¶ÔÀ¬»ø»ØÊÕµÄÐÔÄÜÒѾ­½øÐйý¸ß¶ÈÓÅ»¯£¬ËûÄܹ»ÔÚÓ¦ÓóÌÐò´úÂëÖ´ÐеÄʱºò²¢ÐеÄÖ´ÐÐÀ¬»ø»ØÊյĴ󲿷ֲÙ×÷¡£µ«ÊÇ£¬µ¥¸öÄÚ´æ·ÖÅä²Ù×÷ÓпÉÄܻᴥ·¢Ò»´Î°º¹óµÄÀ¬»ø»ØÊÕ²Ù×÷£¬ÕâÑùGC»áÔÝʱ¹ÒÆðËùÓÐÏß³ÌÀ´½øÐÐÀ¬»ø»ØÊÕ(±ÈÈçGeneration 2Ð͵ÄÀ¬»ø»ØÊÕ)

³£¼ûµÄÄÚ´æ·ÖÅäÒÔ¼°Àý×Ó

Õⲿ·ÖµÄÀý×ÓËäÈ»±³ºó¹ØÓÚÄÚ´æ·ÖÅäµÄµØ·½ºÜÉÙ¡£µ«ÊÇ£¬Èç¹ûÒ»¸ö´óµÄÓ¦ÓóÌÐòÖ´ÐÐ×ã¹»¶àµÄÕâЩСµÄ»áµ¼ÖÂÄÚ´æ·ÖÅäµÄ±í´ïʽ£¬ÄÇôÕâЩ±í´ïʽ»áµ¼Ö¼¸°ÙM£¬ÉõÖÁ¼¸GµÄÄÚ´æ·ÖÅä¡£±ÈÈ磬ÔÚÐÔÄܲâÊÔÍŶӰÑÎÊÌⶨλµ½ÊäÈ볡¾°Ö®Ç°£¬Ò»·ÖÖӵIJâÊÔÄ£Ä⿪·¢ÕßÔÚ±àÒëÆ÷ÀïÃæ±àд´úÂë»á·ÖÅ伸GµÄÄÚ´æ¡£

×°Ïä

×°Ïä·¢ÉúÔÚµ±Í¨³£·ÖÅäÔÚÏß³ÌÕ»ÉÏ»òÕßÊý¾Ý½á¹¹ÖеÄÖµÀàÐÍ£¬»òÕßÁÙʱµÄÖµÐèÒª±»°ü×°µ½¶ÔÏóÖеÄʱºò£¨±ÈÈç·ÖÅäÒ»¸ö¶ÔÏóÀ´´æ·ÅÊý¾Ý£¬»î×Å·µ»ØÒ»¸öÖ¸Õë¸øÒ»¸öObject¶ÔÏ󣩡£.NET¿ò¼ÜÓÉÓÚ·½·¨µÄÇ©Ãû»òÕßÀàÐ͵ķÖÅäλÖã¬ÓÐЩʱºò»á×Ô¶¯¶ÔÖµÀàÐͽøÐÐ×°Ïä¡£½«ÖµÀàÐͰüװΪÒýÓÃÀàÐÍ»á²úÉúÄÚ´æ·ÖÅä¡£.NET¿ò¼Ü¼°ÓïÑԻᾡÁ¿±ÜÃâ²»±ØÒªµÄ×°Ï䣬µ«ÊÇÓÐʱºòÔÚÎÒÃÇûÓÐ×¢Òâµ½µÄʱºò»á²úÉú×°Ïä²Ù×÷¡£¹ý¶àµÄ×°Ïä²Ù×÷»áÔÚÓ¦ÓóÌÐòÖзÖÅä³ÉMÉÏGµÄÄڴ棬Õâ¾ÍÒâζ×ÅÀ¬»ø»ØÊյĸü¼ÓƵ·±£¬Ò²»á»¨¸ü³¤Ê±¼ä¡£

ÔÚPerfViewÖв鿴װÏä²Ù×÷£¬Ö»ÐèÒª¿ªÆôÒ»¸ö×·×Ù£¨trace£©£¬È»ºó²é¿´Ó¦ÓóÌÐòÃû×ÖÏÂÃæµÄGC Heap Alloc Ï¼Çס£¬PerfView»á±¨¸æËùÓеĽø³ÌµÄ×ÊÔ´·ÖÅäÇé¿ö£©£¬Èç¹ûÔÚ·ÖÅäÏàÖп´µ½ÁËһЩÖîÈçSystem.Int32ºÍSystem.CharµÄÖµÀàÐÍ£¬ÄÇô¾Í·¢ÉúÁË×°Ï䡣ѡÔñÒ»¸öÀàÐÍ£¬¾Í»áÏÔʾµ÷ÓÃÕ»ÒÔ¼°·¢Éú×°ÏäµÄ²Ù×÷µÄº¯Êý¡£

Àý1 string·½·¨ºÍÆäÖµÀàÐͲÎÊý

ÏÂÃæµÄʾÀý´úÂëÑÝʾÁËDZÔڵIJ»±ØÒªµÄ×°ÏäÒÔ¼°ÔÚ´óµÄϵͳÖÐµÄÆµ·±µÄ×°Ïä²Ù×÷¡£

ÕâÊÇÒ»¸öÈÕÖ¾»ù´¡À࣬Òò´Ëapp»áºÜƵ·±µÄµ÷ÓÃLogº¯ÊýÀ´¼ÇÈÕÖ¾£¬¿ÉÄܸ÷½·¨»á±»µ÷ÓÃmillons´Î¡£ÎÊÌâÔÚÓÚ£¬µ÷ÓÃstring.Format·½·¨»áµ÷ÓÃÆäÖØÔØµÄ½ÓÊÜÒ»¸östringÀàÐͺÍÁ½¸öObjectÀàÐ͵ķ½·¨£º 

>

¸ÃÖØÔØ·½·¨ÒªÇó.NET Framework °ÑintÐÍ×°ÏäΪobjectÀàÐÍÈ»ºó½«Ëü´«µ½·½·¨µ÷ÓÃÖÐÈ¥¡£ÎªÁ˽â¾öÕâÒ»ÎÊÌ⣬·½·¨¾ÍÊǵ÷ÓÃid.ToString()ºÍsize.ToString()·½·¨£¬È»ºó´«Èëµ½string.Format ·½·¨ÖÐÈ¥£¬µ÷ÓÃToString()·½·¨µÄÈ·»áµ¼ÖÂÒ»¸östringµÄ·ÖÅ䣬µ«ÊÇÔÚstring.Format·½·¨ÄÚ²¿²»ÂÛÔõÑù¶¼»á²úÉústringÀàÐ͵ķÖÅä¡£

Äã¿ÉÄÜ»áÈÏΪÕâ¸ö»ù±¾µÄµ÷ÓÃstring.Format ½ö½öÊÇ×Ö·û´®µÄÆ´½Ó£¬ËùÒÔÄã¿ÉÄÜ»áд³öÕâÑùµÄ´úÂ룺

ʵ¼ÊÉÏ£¬ÉÏÃæÕâÐдúÂëÒ²»áµ¼ÖÂ×°Ï䣬ÒòΪÉÏÃæµÄÓï¾äÔÚ±àÒëµÄʱºò»áµ÷Óãº

Õâ¸ö·½·¨£¬.NET Framework ±ØÐë¶Ô×Ö·û³£Á¿½øÐÐ×°ÏäÀ´µ÷ÓÃConcat·½·¨¡£

½â¾ö·½·¨£º

ÍêÈ«ÐÞ¸´Õâ¸öÎÊÌâºÜ¼òµ¥£¬½«ÉÏÃæµÄµ¥ÒýºÅÌæ»»ÎªË«ÒýºÅ¼´½«×Ö·û³£Á¿»»Îª×Ö·û´®³£Á¿¾Í¿ÉÒÔ±ÜÃâ×°Ï䣬ÒòΪstringÀàÐ͵ÄÒѾ­ÊÇÒýÓÃÀàÐÍÁË¡£

Àý2 ö¾ÙÀàÐ͵Ä×°Ïä

ÏÂÃæµÄÕâ¸öÀý×ÓÊǵ¼ÖÂеÄC# ºÍVB±àÒëÆ÷ÓÉÓÚÆµ·±µÄʹÓÃö¾ÙÀàÐÍ£¬ÌرðÊÇÔÚDictionaryÖÐ×ö²éÕÒ²Ù×÷ʱ·ÖÅäÁË´óÁ¿ÄÚ´æµÄÔ­Òò¡£

ÎÊÌâ·Ç³£Òþ±Î£¬PerfView»á¸æËßÄãenmu.GetHashCode()ÓÉÓÚÄÚ²¿ÊµÏÖµÄÔ­Òò²úÉúÁË×°Ïä²Ù×÷£¬¸Ã·½·¨»áÔڵײãö¾ÙÀàÐ͵ıíÏÖÐÎʽÉϽøÐÐ×°Ï䣬Èç¹û×Ðϸ¿´PerfView£¬»á¿´µ½Ã¿´Îµ÷ÓÃGetHashCode»á²úÉúÁ½´Î×°Ïä²Ù×÷¡£±àÒëÆ÷²åÈëÒ»´Î£¬.NET Framework²åÈëÁíÍâÒ»´Î¡£

½â¾ö·½·¨£º

ͨ¹ýÔÚµ÷ÓÃGetHashCodeµÄʱºò½«Ã¶¾ÙµÄµ×²ã±íÏÖÐÎʽ½øÐÐÇ¿ÖÆÀàÐÍת»»¾Í¿ÉÒÔ±ÜÃâÕâÒ»×°Ïä²Ù×÷¡£

ÁíÒ»¸öʹÓÃö¾ÙÀàÐ;­³£²úÉú×°ÏäµÄ²Ù×÷ʱenum.HasFlag¡£´«¸øHasFlagµÄ²ÎÊý±ØÐë½øÐÐ×°Ï䣬ÔÚ´ó¶àÊýÇé¿öÏ£¬·´¸´µ÷ÓÃHasFlagͨ¹ýλÔËËã²âÊԷdz£¼òµ¥ºÍ²»ÐèÒª·ÖÅäÄÚ´æ¡£

ÒªÀμǻù±¾ÒªÁìµÚÒ»Ìõ£¬²»Òª¹ýÔçÓÅ»¯¡£²¢ÇÒ²»Òª¹ýÔçµÄ¿ªÊ¼ÖØÐ´ËùÓдúÂë¡£ ÐèҪעÒâµ½ÕâЩװÏäµÄºÄ·Ñ£¬Ö»ÓÐÔÚͨ¹ý¹¤¾ßÕÒµ½²¢ÇÒ¶¨Î»µ½×îÖ÷ÒªÎÊÌâËùÔÚÔÙ¿ªÊ¼Ð޸ĴúÂë¡£

×Ö·û´®

×Ö·û´®²Ù×÷ÊÇÒýÆðÄÚ´æ·ÖÅäµÄ×î´óÔªÐ×Ö®Ò»£¬Í¨³£ÔÚPerfViewÖÐÕ¼µ½Ç°Îåµ¼ÖÂÄÚ´æ·ÖÅäµÄÔ­Òò¡£Ó¦ÓóÌÐòʹÓÃ×Ö·û´®À´½øÐÐÐòÁл¯£¬±íʾJSONºÍREST¡£ÔÚ²»Ö§³Öö¾ÙÀàÐ͵ÄÇé¿öÏ£¬×Ö·û´®¿ÉÒÔÓÃÀ´ÓëÆäËûϵͳ½øÐн»»¥¡£µ±ÎÒÃǶ¨Î»µ½ÊÇÓÉÓÚstring²Ù×÷µ¼Ö¶ÔÐÔÄܲúÉúÑÏÖØÓ°ÏìµÄʱºò£¬ÐèÒªÁôÒâstringÀàµÄFormat(),Concat(),Split(),Join(),Substring()µÈÕâЩ·½·¨¡£Ê¹ÓÃStringBuilderÄܹ»±ÜÃâÔÚÆ´½Ó¶à¸ö×Ö·û´®Ê±´´½¨¶à¸öÐÂ×Ö·û´®µÄ¿ªÏú£¬µ«ÊÇStringBuilderµÄ´´½¨Ò²ÐèÒª½øÐÐÁ¼ºÃµÄ¿ØÖÆÒÔ±ÜÃâ¿ÉÄÜ»á²úÉúµÄÐÔÄÜÆ¿¾±¡£

Àý3 ×Ö·û´®²Ù×÷

ÔÚC#±àÒëÆ÷ÖÐÓÐÈçÏ·½·¨À´Êä³ö·½·¨Ç°ÃæµÄxml¸ñʽµÄ×¢ÊÍ¡£

¿ÉÒÔ¿´µ½£¬ÔÚÕâÆ¬´úÂëÖаüº¬Óкܶà×Ö·û´®²Ù×÷¡£´úÂëÖÐʹÓÃÀà¿â·½·¨À´½«ÐзָîΪ×Ö·û´®£¬À´È¥³ý¿Õ¸ñ£¬À´¼ì²é²ÎÊýtextÊÇ·ñÊÇXMLÎĵµ¸ñʽµÄ×¢ÊÍ£¬È»ºó´ÓÐÐÖÐÈ¡³ö×Ö·û´®´¦Àí¡£

ÔÚWriteFormattedDocComment·½·¨Ã¿´Î±»µ÷ÓÃʱ£¬µÚÒ»ÐдúÂëµ÷ÓÃSplit()¾Í»á·ÖÅäÈý¸öÔªËØµÄ×Ö·û´®Êý×é¡£±àÒëÆ÷Ò²ÐèÒª²úÉú´úÂëÀ´·ÖÅäÕâ¸öÊý×é¡£ÒòΪ±àÒëÆ÷²¢²»ÖªµÀ£¬Èç¹ûSplite()´æ´¢ÁËÕâÒ»Êý×飬ÄÇôÆäËû²¿·ÖµÄ´úÂëÓпÉÄÜ»á¸Ä±äÕâ¸öÊý×飬ÕâÑù¾Í»áÓ°Ïìµ½ºóÃæ¶ÔWriteFormattedDocComment·½·¨µÄµ÷Óá£Ã¿´Îµ÷ÓÃSplite()·½·¨Ò²»áΪ²ÎÊýtext·ÖÅäÒ»¸östring£¬È»ºóÔÚ·ÖÅäÆäËûÄÚ´æÀ´Ö´ÐÐsplite²Ù×÷¡£

WriteFormattedDocComment·½·¨Öе÷ÓÃÁËÈý´ÎTrimStart()·½·¨£¬ÔÚÄÚ´æ»·Öе÷ÓÃÁËÁ½´Î£¬ÕâЩ¶¼ÊÇÖØ¸´µÄ¹¤×÷ºÍÄÚ´æ·ÖÅä¡£¸üÔã¸âµÄÊÇ£¬TrimStart()µÄÎÞ²ÎÖØÔØ·½·¨µÄÇ©ÃûÈçÏ£º

WriteFormattedDocComment() ·½·¨µÄµÚÒ»¸ö°æ±¾·ÖÅäÁËÒ»¸öÊý×飬¼¸¸ö×Ó×Ö·û´®£¬Ò»¸ötrimºóµÄ×Ó×Ö·û´®£¬ÒÔ¼°Ò»¸ö¿ÕµÄparamsÊý×é¡£Ò²¼ì²éÁË”///”¡£Ð޸ĺóµÄ´úÂë½öʹÓÃÁËindex²Ù×÷£¬Ã»ÓÐÈκζîÍâµÄÄÚ´æ·ÖÅä¡£Ëü²éÕÒµÚÒ»¸ö·Ç¿Õ¸ñµÄ×Ö·û´®£¬È»ºóÖð¸ö×Ö·û´®±È½ÏÀ´²é¿´ÊÇ·ñÒÔ”///”¿ªÍ·¡£ºÍʹÓÃTrimStart()²»Í¬£¬Ð޸ĺóµÄ´úÂëʹÓÃIndexOfFirstNonWhiteSpaceChar·½·¨À´·µ»ØµÚÒ»¸ö·Ç¿Õ¸ñµÄ¿ªÊ¼Î»Öã¬Í¨¹ýʹÓÃÕâÖÖ·½·¨£¬¿ÉÒÔÒÆ³ýWriteFormattedDocComment()·½·¨ÖеÄËùÓжîÍâÄÚ´æ·ÖÅä¡£

Àý4 StringBuilder

±¾ÀýÖÐʹÓÃStringBuilder¡£ÏÂÃæµÄº¯ÊýÓÃÀ´²úÉú·ºÐÍÀàÐ͵ÄÈ«Ãû£º

×¢ÒâÁ¦¼¯Öе½StringBuilderʵÀýµÄ´´½¨ÉÏÀ´¡£´úÂëÖе÷ÓÃsb.ToString()»áµ¼ÖÂÒ»´ÎÄÚ´æ·ÖÅä¡£ÔÚStringBuilderÖеÄÄÚ²¿ÊµÏÖÒ²»áµ¼ÖÂÄÚ²¿ÄÚ´æ·ÖÅ䣬µ«ÊÇÎÒÃÇÈç¹ûÏëÒª»ñÈ¡µ½stringÀàÐ͵Ľá¹û»¯£¬ÕâЩ·ÖÅäÎÞ·¨±ÜÃâ¡£

½â¾ö·½·¨£º

Òª½â¾öStringBuilder¶ÔÏóµÄ·ÖÅä¾ÍʹÓûº´æ¡£¼´Ê¹»º´æÒ»¸ö¿ÉÄܱ»ËæÊ±¶ªÆúµÄµ¥¸öʵÀý¶ÔÏóÒ²Äܹ»ÏÔÖøµÄÌá¸ß³ÌÐòÐÔÄÜ¡£ÏÂÃæÊǸú¯ÊýµÄеÄʵÏÖ¡£³ýÁËÏÂÃæÁ½ÐдúÂ룬ÆäËû´úÂë¾ùÏàͬ

¹Ø¼ü²¿·ÖÔÚÓÚеĠAcquireBuilder()ºÍGetStringAndReleaseBuilder()·½·¨£º

ÉÏÃæ·½·¨ÊµÏÖÖÐʹÓÃÁËthread-static×Ö¶ÎÀ´»º´æStringBuilder¶ÔÏó£¬ÕâÊÇÓÉÓÚеıàÒëÆ÷ʹÓÃÁ˶àÏ̵߳ÄÔ­Òò¡£ºÜ¿ÉÄÜ»áÍüµôÕâ¸öThreadStaticÉùÃ÷¡£Thread-static×Ö·ûΪÿ¸öÖ´ÐÐÕⲿ·ÖµÄ´úÂëµÄÏ̱߳£ÁôÒ»¸öΨһµÄʵÀý¡£

Èç¹ûÒѾ­ÓÐÁËÒ»¸öʵÀý£¬ÄÇôAcquireBuilder()·½·¨Ö±½Ó·µ»Ø¸Ã»º´æµÄʵÀý£¬ÔÚÇå¿Õºó£¬½«¸Ã×ֶλòÕß»º´æÉèÖÃΪnull¡£·ñÔòAcquireBuilder()´´½¨Ò»¸öеÄʵÀý²¢·µ»Ø£¬È»ºó½«×ֶκÍcacheÉèÖÃΪnull ¡£

µ±ÎÒÃǶÔStringBuilder´¦ÀíÍê³ÉÖ®ºó£¬µ÷ÓÃGetStringAndReleaseBuilder()·½·¨¼´¿É»ñÈ¡string½á¹û¡£È»ºó½«StringBuilder±£´æµ½×Ö¶ÎÖлòÕß»º´æÆðÀ´£¬È»ºó·µ»Ø½á¹û¡£Õâ¶Î´úÂëºÜ¿ÉÄÜÖØ¸´Ö´ÐУ¬´Ó¶ø´´½¨¶à¸öStringBuilder¶ÔÏó£¬ËäÈ»ºÜÉٻᷢÉú¡£´úÂëÖнö±£´æ×îºó±»ÊͷŵÄÄǸöStringBuilder¶ÔÏóÀ´Áô×÷ºóÓá£ÐµıàÒëÆ÷ÖУ¬ÕâÖÖ¼òµ¥µÄµÄ»º´æ²ßÂÔ¼«´óµØ¼õÉÙÁ˲»±ØÒªµÄÄÚ´æ·ÖÅä¡£.NET Framework ºÍMSBuildÖеIJ¿·ÖÄ£¿éҲʹÓÃÁËÀàËÆµÄ¼¼ÊõÀ´ÌáÉýÐÔÄÜ¡£

¼òµ¥µÄ»º´æ²ßÂÔ±ØÐë×ñÑ­Á¼ºÃµÄ»º´æÉè¼Æ£¬ÒòΪËûÓдóСµÄÏÞÖÆcap¡£Ê¹Óûº´æ¿ÉÄܱÈ֮ǰÓиü¶àµÄ´úÂ룬ҲÐèÒª¸ü¶àµÄά»¤¹¤×÷¡£ÎÒÃÇÖ»ÓÐÔÚ·¢ÏÖÕâÊǸöÎÊÌâÖ®ºó²ÅÓ¦¸Ã²É»º´æ²ßÂÔ¡£PerfViewÒѾ­ÏÔʾ³öStringBuilder¶ÔÄÚ´æµÄ·ÖÅä¹±Ï×Ï൱´ó¡£

LINQºÍLambdas±í´ïʽ

ʹÓÃLINQ ºÍLambdas±í´ïʽÊÇC#ÓïÑÔÇ¿´óÉú²úÁ¦µÄÒ»¸öºÜºÃÌåÏÖ£¬µ«ÊÇÈç¹û´úÂëÐèÒªÖ´Ðкܶà´ÎµÄʱºò£¬¿ÉÄÜÐèÒª¶ÔLINQ»òÕßLambdas±í´ïʽ½øÐÐÖØÐ´¡£

Àý5 Lambdas±í´ïʽ£¬List<T>£¬ÒÔ¼°IEnumerable<T>

ÏÂÃæµÄÀý×ÓʹÓàLINQÒÔ¼°º¯Êýʽ·ç¸ñµÄ´úÂëÀ´Í¨¹ý±àÒëÆ÷Ä£Ð͸ø¶¨µÄÃû³ÆÀ´²éÕÒ·ûºÅ¡£

еıàÒëÆ÷ºÍIDE ÌåÑé»ùÓÚµ÷ÓÃFindMatchingSymbol£¬Õâ¸öµ÷Ó÷dz£Æµ·±£¬Ôڴ˹ý³ÌÖУ¬Õâô¼òµ¥µÄÒ»ÐдúÂëÒþ²ØÁË»ù´¡ÄÚ´æ·ÖÅ俪Ïú¡£ÎªÁËչʾÕâÆäÖеķÖÅ䣬ÎÒÃÇÊ×ÏȽ«¸Ãµ¥Ðк¯Êý²ð·ÖΪÁ½ÐУº

µÚÒ»ÐÐÖУ¬ lambda±í´ïʽ“s=>s.Name==name” ÊǶԱ¾µØ±äÁ¿nameµÄÒ»¸ö ±Õ°ü¡£Õâ¾ÍÒâζ×ÅÐèÒª·ÖÅä¶îÍâµÄ¶ÔÏóÀ´Îª Î¯ÍжÔÏópredict·ÖÅä¿Õ¼ä£¬ÐèÒªÒ»¸ö·ÖÅäÒ»¸ö¾²Ì¬ÀàÀ´±£´æ»·¾³´Ó¶ø±£´ænameµÄÖµ¡£±àÒëÆ÷»á²úÉúÈçÏ´úÂ룺

Á½¸önew²Ù×÷·û£¨µÚÒ»¸ö´´½¨Ò»¸ö»·¾³À࣬µÚ¶þ¸öÓÃÀ´´´½¨Î¯ÍУ©ºÜÃ÷ÏԵıíÃ÷ÁËÄÚ´æ·ÖÅäµÄÇé¿ö¡£

ÏÖÔÚÀ´¿´¿´FirstOrDefault·½·¨µÄµ÷Óã¬ËûÊÇIEnumerable<T>ÀàµÄÀ©Õ¹·½·¨£¬ÕâÒ²»á²úÉúÒ»´ÎÄÚ´æ·ÖÅä¡£ÒòΪFirstOrDefaultʹÓÃIEnumerable<T>×÷ΪµÚÒ»¸ö²ÎÊý£¬¿ÉÒÔ½«ÉÏÃæµÄÕ¹¿ªÎªÏÂÃæµÄ´úÂ룺

symbols±äÁ¿ÊÇÀàÐÍΪList<T>µÄ±äÁ¿¡£List<T>¼¯ºÏÀàÐÍʵÏÖÁËIEnumerable<T>¼´¿É²¢ÇÒÇåÎúµØ¶¨ÒåÁËÒ»¸ö µü´úÆ÷£¬List<T>µÄµü´úÆ÷ʹÓÃÁËÒ»ÖֽṹÌåÀ´ÊµÏÖ¡£Ê¹Óýṹ¶ø²»ÊÇÀàÒâζ×Åͨ³£¿ÉÒÔ±ÜÃâÈκÎÔÚÍйܶÑÉϵķÖÅ䣬´Ó¶ø¿ÉÒÔÓ°ÏìÀ¬»ø»ØÊÕµÄЧÂÊ¡£Ã¶¾ÙµäÐ͵ÄÓô¦ÔÚÓÚ·½±ãÓïÑÔ²ãÃæÉÏʹÓÃforeachÑ­»·£¬ËûʹÓÃenumerator½á¹¹ÌåÔÚµ÷ÓÃÍÆÕ»ÉÏ·µ»Ø¡£µÝÔöµ÷ÓöÑÕ»Ö¸ÕëÀ´Îª¶ÔÏó·ÖÅä¿Õ¼ä£¬²»»áÓ°ÏìGC¶ÔÍйܶÔÏóµÄ²Ù×÷¡£

ÔÚÉÏÃæµÄÕ¹¿ªFirstOrDefaultµ÷ÓõÄÀý×ÓÖУ¬´úÂë»áµ÷ÓÃIEnumerabole<T>½Ó¿ÚÖеÄGetEnumerator()·½·¨¡£½«symbols¸³Öµ¸øIEnumerable<Symbol>ÀàÐ͵Äenumerable ±äÁ¿£¬»áʹµÃ¶ÔÏó¶ªÊ§ÁËÆäʵ¼ÊµÄList<T>ÀàÐÍÐÅÏ¢¡£Õâ¾ÍÒâζ×ŵ±´úÂëͨ¹ýenumerable.GetEnumerator()·½·¨»ñÈ¡µü´úÆ÷ʱ£¬.NET Framework ±ØÐë¶Ô·µ»ØµÄÖµ£¨¼´µü´úÆ÷£¬Ê¹ÓýṹÌåʵÏÖ£©ÀàÐͽøÐÐ×°Ïä´Ó¶ø½«Æä¸³¸øIEnumerable<Symbol>ÀàÐ͵Ä(ÒýÓÃÀàÐÍ)enumerator±äÁ¿¡£

½â¾ö·½·¨£º

½â¾ö°ì·¨ÊÇÖØÐ´FindMatchingSymbol·½·¨£¬½«µ¥¸öÓï¾äʹÓÃÁùÐдúÂëÌæ´ú£¬ÕâЩ´úÂëÒÀ¾ÉÁ¬¹á£¬Ò×ÓÚÔĶÁºÍÀí½â£¬Ò²ºÜÈÝÒ×ʵÏÖ¡£

´úÂëÖв¢Ã»ÓÐʹÓÃLINQÀ©Õ¹·½·¨£¬lambdas±í´ïʽºÍµü´úÆ÷£¬²¢ÇÒûÓжîÍâµÄÄÚ´æ·ÖÅ俪Ïú¡£ÕâÊÇÒòΪ±àÒëÆ÷¿´µ½symbol ÊÇList<T>ÀàÐ͵ļ¯ºÏ£¬ÒòΪÄܹ»Ö±½Ó½«·µ»ØµÄ½á¹¹ÐÔµÄö¾ÙÆ÷°ó¶¨µ½ÀàÐÍÕýÈ·µÄ±¾µØ±äÁ¿ÉÏ£¬´Ó¶ø±ÜÃâÁ˶ÔstructÀàÐ͵Ä×°Ïä²Ù×÷¡£Ô­ÏȵĴúÂëչʾÁËC#ÓïÑԷḻµÄ±íÏÖÐÎʽÒÔ¼°.NET Framework Ç¿´óµÄÉú²úÁ¦¡£¸ÃןóµÄ´úÂëÔò¸ü¼Ó¸ßЧ¼òµ¥£¬²¢Ã»ÓÐÌí¼Ó¸´ÔӵĴúÂë¶øÔö¼Ó¿Éά»¤ÐÔ¡£

AyncÒì²½

½ÓÏÂÀ´µÄÀý×ÓչʾÁ˵±ÎÒÃÇÊÔͼ»º´æÒ»²¿·½·¨·µ»ØÖµÊ±µÄÒ»¸öÆÕ±éÎÊÌ⣺

Àý6 »º´æÒì²½·½·¨

Visual Studio IDE µÄÌØÐÔÔںܴó³Ì¶ÈÉϽ¨Á¢ÔÚеÄC#ºÍVB±àÒëÆ÷»ñÈ¡Óï·¨Ê÷µÄ»ù´¡ÉÏ£¬µ±±àÒëÆ÷ʹÓÃasyncµÄʱºòÈÔÄܹ»±£³ÖVisual StuidoÄܹ»ÏìÓ¦¡£ÏÂÃæÊÇ»ñÈ¡Óï·¨Ê÷µÄµÚÒ»¸ö°æ±¾µÄ´úÂ룺

¿ÉÒÔ¿´µ½µ÷ÓÃGetSyntaxTreeAsync() ·½·¨»áʵÀý»¯Ò»¸öParser¶ÔÏ󣬽âÎö´úÂ룬Ȼºó·µ»ØÒ»¸öTask<SyntaxTree>¶ÔÏó¡£×îºÄÐÔÄܵĵط½ÔÚΪParserʵÀý·ÖÅäÄÚ´æ²¢½âÎö´úÂë¡£·½·¨Öзµ»ØÒ»¸öTask¶ÔÏó£¬Òò´Ëµ÷ÓÃÕß¿ÉÒÔawait½âÎö¹¤×÷£¬È»ºóÊÍ·ÅUIÏß³ÌʹµÃ¿ÉÒÔÏìÓ¦Óû§µÄÊäÈë¡£

ÓÉÓÚVisual StudioµÄÒ»Ð©ÌØÐÔ¿ÉÄÜÐèÒª¶à´Î»ñÈ¡ÏàͬµÄÓï·¨Ê÷£¬ ËùÒÔͨ³£¿ÉÄܻỺ´æ½âÎö½á¹ûÀ´½Úʡʱ¼äºÍÄÚ´æ·ÖÅ䣬µ«ÊÇÏÂÃæµÄ´úÂë¿ÉÄܻᵼÖÂÄÚ´æ·ÖÅ䣺

´úÂëÖÐÓÐÒ»¸öSynataxTreeÀàÐ͵ÄÃûΪcachedResultµÄ×ֶΡ£µ±¸Ã×Ö¶ÎΪ¿ÕµÄʱºò£¬GetSyntaxTreeAsync()Ö´ÐУ¬È»ºó½«½á¹û±£´æÔÚcacheÖС£GetSyntaxTreeAsync()·½·¨·µ»ØSyntaxTree¶ÔÏó¡£ÎÊÌâÔÚÓÚ£¬µ±ÓÐÒ»¸öÀàÐÍΪTask<SyntaxTree> ÀàÐ͵ÄasyncÒì²½·½·¨Ê±£¬ÏëÒª·µ»ØSyntaxTreeµÄÖµ£¬±àÒëÆ÷»áÉú³ö´úÂëÀ´·ÖÅäÒ»¸öTaskÀ´±£´æÖ´Ðнá¹û£¨Í¨¹ýʹÓÃTask<SyntaxTree>.FromResult()£©¡£Task»á±ê¼ÇΪÍê³É£¬È»ºó½á¹ûÁ¢Âí·µ»Ø¡£·ÖÅäTask¶ÔÏóÀ´´æ´¢Ö´ÐеĽá¹ûÕâ¸ö¶¯×÷µ÷Ó÷dz£Æµ·±£¬Òò´ËÐÞ¸´¸Ã·ÖÅäÎÊÌâÄܹ»¼«´óÌá¸ßÓ¦ÓóÌÐòÏìÓ¦ÐÔ¡£

½â¾ö·½·¨£º

ÒªÒÆ³ý±£´æÍê³ÉÁËÖ´ÐÐÈÎÎñµÄ·ÖÅ䣬¿ÉÒÔ»º´æTask¶ÔÏóÀ´±£´æÍê³ÉµÄ½á¹û¡£

´úÂ뽫cachedResult ÀàÐ͸ÄΪÁËTask<SyntaxTree> ²¢ÇÒÒýÈëÁËasync°ïÖúº¯ÊýÀ´±£´æÔ­Ê¼´úÂëÖеÄGetSyntaxTreeAsync()º¯Êý¡£GetSyntaxTreeAsyncº¯ÊýÏÖÔÚʹÓÃnull²Ù×÷·û£¬À´±íʾµ±cachedResult²»Îª¿Õʱֱ½Ó·µ»Ø£¬Îª¿ÕʱGetSyntaxTreeAsyncµ÷ÓÃGetSyntaxTreeUncachedAsync()È»ºó»º´æ½á¹û¡£×¢ÒâGetSyntaxTreeAsync²¢Ã»ÓÐawaitµ÷ÓÃGetSyntaxTreeUncachedAsync¡£Ã»ÓÐʹÓÃawaitÒâζ×ŵ±GetSyntaxTreeUncachedAsync·µ»ØTaskÀàÐÍʱ£¬GetSyntaxTreeAsync Ò²Á¢¼´·µ»ØTask£¬ ÏÖÔÚ»º´æµÄÊÇTask£¬Òò´ËÔÚ·µ»Ø»º´æ½á¹ûµÄʱºòûÓжîÍâµÄÄÚ´æ·ÖÅä¡£

ÆäËûһЩӰÏìÐÔÄܵÄÔÓÏî

ÔÚ´óµÄapp»òÕß´¦Àí´óÁ¿Êý¾ÝµÄAppÖУ¬»¹Óм¸µã¿ÉÄÜ»áÒý·¢Ç±ÔÚµÄÐÔÄÜÎÊÌâ¡£

×Öµä

ÔںܶàÓ¦ÓóÌÐòÖУ¬DictionaryÓõĺܹ㣬ËäÈ»×ַdz£·½±ãºÍ¸ßУ£¬µ«ÊǾ­³£»áʹÓò»µ±¡£ÔÚVisual StudioÒÔ¼°ÐµıàÒëÆ÷ÖУ¬Ê¹ÓÃÐÔÄÜ·ÖÎö¹¤¾ß·¢ÏÖ£¬Ðí¶àdictionayÖ»°üº¬ÓÐÒ»¸öÔªËØ»òÕ߸ɴàÊǿյġ£Ò»¸ö¿ÕµÄDictionay½á¹¹ÄÚ²¿»áÓÐ10¸ö×Ö¶ÎÔÚx86»úÆ÷ÉϵÄÍйܶÑÉÏ»áÕ¼¾Ý48¸ö×Ö½Ú¡£µ±ÐèÒªÔÚ×öÓ³Éä»òÕß¹ØÁªÊý¾Ý½á¹¹ÐèÒªÊÂÏȳ£Á¿Ê±¼ä²éÕÒµÄʱºò£¬×Öµä·Ç³£ÓÐÓᣵ«Êǵ±Ö»Óм¸¸öÔªËØ£¬Ê¹ÓÃ×Öµä¾Í»áÀË·Ñ´óÁ¿ÄÚ´æ¿Õ¼ä¡£Ïà·´£¬ÎÒÃÇ¿ÉÒÔʹÓÃList<KeyValuePair<K,V>>½á¹¹À´ÊµÏÖ±ãÀû£¬¶ÔÓÚÉÙÁ¿ÔªËØÀ´Ëµ£¬Í¬Ñù¸ßУ¡£Èç¹û½ö½öʹÓÃ×ÖµäÀ´¼ÓÔØÊý¾Ý£¬È»ºó¶ÁÈ¡Êý¾Ý£¬ÄÇôʹÓÃÒ»¸ö¾ßÓÐN£¨log(N)£©µÄ²éÕÒЧÂʵÄÓÐÐòÊý×飬ÔÚËÙ¶ÈÉÏÒ²»áºÜ¿ì£¬µ±È»ÕâЩ¶¼È¡¾öÓÚµÄÔªËØµÄ¸öÊý¡£

ÀàºÍ½á¹¹

²»ÉõÑϸñµÄ½²£¬ÔÚÓÅ»¯Ó¦ÓóÌÐò·½Ã棬ÀàºÍ½á¹¹ÌṩÁËÒ»ÖÖ¾­µäµÄ¿Õ¼ä/ʱ¼äµÄȨºâ(trade off)¡£ÔÚx86»úÆ÷ÉÏ£¬Ã¿¸öÀ༴ʹûÓÐÈκÎ×ֶΣ¬Ò²»á·ÖÅä12 byteµÄ¿Õ¼ä (Òë×¢£ºÀ´±£´æÀàÐͶÔÏóÖ¸ÕëºÍͬ²½Ë÷Òý¿é)£¬µ«Êǽ«Àà×÷Ϊ·½·¨Ö®¼ä²ÎÊý´«µÝµÄʱºòÈ´Ê®·Ö¸ßЧÁ®¼Û£¬ÒòΪֻÐèÒª´«µÝÖ¸ÏòÀàÐÍʵÀýµÄÖ¸Õë¼´¿É¡£½á¹¹ÌåÈç¹û²»×²ÏòµÄ»°£¬²»»áÔÙÍйܶÑÉϲúÉúÈκÎÄÚ´æ·ÖÅ䣬µ«Êǵ±½«Ò»¸ö±È½Ï´óµÄ½á¹¹Ìå×÷Ϊ·½·¨²ÎÊý»òÕß·µ»ØÖµµÃʱºò£¬ÐèÒªCPUʱ¼äÀ´×Ô¶¯¸´ÖƺͿ½±´½á¹¹Ì壬Ȼºó½«½á¹¹ÌåµÄÊôÐÔ»º´æµ½±¾µØ±ãÁ½ÖÖÒÔ±ÜÃâ¹ý¶àµÄÊý¾Ý¿½±´¡£

»º´æ

ÐÔÄÜÓÅ»¯µÄÒ»¸ö³£Óü¼ÇÉÊÇ»º´æ½á¹û¡£µ«ÊÇÈç¹û»º´æÃ»ÓдóСÉÏÏÞ»òÕßÁ¼ºÃµÄ×ÊÔ´ÊÍ·Å»úÖÆ¾Í»áµ¼ÖÂÄÚ´æÐ¹Â©¡£ÔÚ´¦Àí´óÊý¾ÝÁ¿µÄʱºò£¬Èç¹ûÔÚ»º´æÖлº´æÁ˹ý¶àÊý¾Ý¾Í»áÕ¼ÓôóÁ¿Äڴ棬ÕâÑùµ¼ÖµÄÀ¬»ø»ØÊÕ¿ªÏú¾Í»á³¬¹ýÔÚ»º´æÖвéÕÒ½á¹ûËù´øÀ´µÄºÃ´¦¡£

½áÂÛ

ÔÚ´óµÄϵͳ£¬»òÕß»òÕßÐèÒª´¦Àí´óÁ¿Êý¾ÝµÄϵͳÖУ¬ÎÒÃÇÐèÒª¹Ø×¢²úÉúÐÔÄÜÆ¿¾±Ö¢×´£¬ÕâЩÎÊÌâÔÙ¹æÄ£ÉÏ»áÓ°ÏìappµÄÏìÓ¦ÐÔ£¬Èç×°Ïä²Ù×÷¡¢×Ö·û´®²Ù×÷¡¢LINQºÍLambda±í´ïʽ¡¢»º´æasync·½·¨¡¢»º´æÈ±ÉÙ´óСÏÞÖÆÒÔ¼°Á¼ºÃµÄ×ÊÔ´ÊͷŲßÂÔ¡¢Ê¹ÓÃDictionay²»µ±¡¢ÒÔ¼°µ½´¦´«µÝ½á¹¹ÌåµÈ¡£ÔÚÓÅ»¯ÎÒÃǵÄÓ¦ÓóÌÐòµÄʱºò£¬ÐèҪʱ¿Ì×¢Òâ֮ǰÌáµ½¹ýµÄËĵ㣺

  1. ²»Òª½øÐйýÔçÓÅ»¯——ÔÚ¶¨Î»ºÍ·¢ÏÖÎÊÌâÖ®ºóÔÙ½øÐе÷ÓÅ¡£
  2. רҵ²âÊÔ²»»á˵»Ñ——ûÓÐÆÀ²â£¬±ãÊDz²⡣
  3. ºÃ¹¤¾ßºÜÖØÒª¡£——ÏÂÔØPerfView£¬È»ºóÈ¥¿´Ê¹Óý̡̳£
  4. ÄÚ´æ·ÖÅä¾ö¶¨appµÄÏìÓ¦ÐÔ¡£——ÕâÒ²ÊÇеıàÒëÆ÷ÐÔÄÜÍŶӻ¨µÄʱ¼ä×î¶àµÄµØ·½¡£
   
2586 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ

.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield

ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹