½ÐAssembly Qualified Name£¿ËüÊÇÒ»¸öÎļþÃûÂð£¿ËüÓÐʲô²»Í¬£¿ Ëü²»ÊÇÒ»¸öÎļþÃû£¬Ïà±ÈÎļþÃû£¬Assembly Qualified Name£¨³ÌÐò¼¯ÏÞ¶¨Ãû³Æ£©£¬¸üÄÜÈ·¶¨Ò»¸ö³ÌÐò¼¯£¬Ëü°üº¬ÎļþÃû£¬µ«Í¬Ê±°üº¬°æ±¾£¬¹«Ô¿£¬ºÍÇøÓò¡£ ¡¤ Assembly.Load(¡°foo.dll¡±); Õâ¾ä»°ÊÇ·ñÕýÈ·£¿ Assembly name ÓÐËĸö²¿·Ö×é³É£ºFriendly Name£¬Culture, Pubilc Key(Token), Version¡£ËùÒÔ°´ËûµÄÒâ˼Õâ¾ä»°ÊÇ´íÎóµÄ¡£ ¡¤ ×öÇ¿Ç©ÃûµÄassemblyÓë²»×öÇ¿Ç©ÃûµÄassemblyÓÐʲô²»Í¬£¿ Ç¿Ç©ÃûµÄ³ÌÐò¼¯¿ÉÒÔÈ·ÈÏassembly nameÊÇΨһµÄ£¨ÒòΪʹÓÃÁËpublic key token£©¡£ Ç¿Ç©ÃûµÄ³ÌÐò¼¯¿ÉÒÔ×ö³Écom¡£ Ç¿Ç©Ãû³ÌÐò¼¯¿ÉÒÔ°²×°µ½GACÖС£ ¡¤ DateTimeÊÇ·ñ¿ÉÒÔΪnull ²»ÄÜΪnull£¬°üÀ¨intʲôµÄ¶¼²»ÄܵÈÓÚnull¡£µ±È»2.0¿ÉÒÔÀï¼Ó¿É¿ÕÀàÐÍ£¬µ«ÊÇÔÚ±àÒëºóÄã»á·¢ÏÖ¿É¿ÕÀàÐÍÆäʵÊǼٵġ£ ¡¤ ʲô½ÐJIT£¿Ê²Ã´ÊÇNGEN£¿ËüÃÇ·Ö±ðÓÐʲôÏÞÖƺͺô¦£¿ .NET ²ÉÓÃÖмäÓïÑÔ(IL)»úÖÆ¡£Just In TimeÊÇÖ¸³ÌÐòµÚÒ»´ÎÔËÐеÄʱºò²Å½øÐаÑÖмäÓïÑÔ(IL)±àÒë³É»úÆ÷´úÂ룬JITÔö¼ÓÁËÖ´ÐÐЧÂÊ¡£±¾»úÓ³ÏñÉú³ÉÆ÷ (Ngen.exe) ÊÇÒ»¸öÌá¸ßÍйÜÓ¦ÓóÌÐòÐÔÄܵŤ¾ß¡£Ngen.exe ´´½¨±¾»úÓ³Ïñ£¨°üº¬¾±àÒëµÄÌض¨ÓÚ´¦ÀíÆ÷µÄ»úÆ÷´úÂëµÄÎļþ£©£¬²¢½«ËüÃÇ°²×°µ½±¾µØ¼ÆËã»úÉϵı¾»úÓ³Ïñ»º´æÖС£ÔËÐпâ¿É´Ó»º´æÖÐʹÓñ¾»úÓ³Ïñ£¬¶ø²»ÊÇʹÓÃʵʱ (JIT) ±àÒëÆ÷±àÒëÔʼ³ÌÐò¼¯¡£ÕâÊÇΪʲôasp.net³ÌÐòµÚÒ»´Î»á±È½ÏÂý£¬ÒòΪËûÊÇJIT¡£ ¡¤ .NET CLRÖÐÒ»´úµÄÀ¬»øÊÕ¼¯Æ÷ÊÇÈçºÎ¹ÜÀí¶ÔÏóµÄÉúÃüÖÜÆڵģ¿Ê²Ã´½Ð·ÇÈ·¶¨ÐÔÖս᣿ À¬»øÊÕ¼¯Æ÷²»ÄܹÜÀí¶ÔÏóµÄÉúÃüÖÜÆÚ°É£¿£¿ÎÒÈÏΪËûÖ»Äܸú×Ù¶ÔÏóµÄÉúÃüÖÜÆÚ ÏÈ¿´Ò»¸ö¶ÔÏóµÄÉúÃüÖÜÆÚ 1. µ÷ÓÃILµÄnewobjÖ¸Á·ÖÅäÒ»¶¨¿Õ¼äµÄÄÚ´æ¡£ 2. ³õʼ»¯ÄÚ´æ¿Õ¼ä£¬±ÈÈçÉèÖÃΪstringÀàÐÍ¡£ 3. ʹÓöÔÏó¡£ 4. Ïú»Ù¶ÔÏó£¬Ö´ÐÐÇåÀí 5. »ØÊÕÄÚ´æ À¬»øÊÕ¼¯ÊÇÔÚµÚ4²½¡£ÓÐÈýÖÖ·½·¨£ºFinalize¡¢Dispose¡¢Close¡£ µ«À¬»øÊÕ¼¯Ö´ÐеÄʱ»ú²»¶¨ µÄ£¬³õѧÕß¿ÉÒÔÈÏΪ¶ÔÏóÏú»ÙµÄʱ»úÊÇÔÚÀ¬»øÊÕ¼¯Æ÷ÈÏΪ¶ÔÏóÐèÒª±»Ïú»ÙµÄʱºò½øÐеģ¬ Ëû ¶ÔÓÚ³ÌÐòÔ±ÊÇ͸Ã÷µÄ£¬³õѧÕ߸ù±¾²»ÐèÒªÖªµÀÀ¬»øÊÕ¼¯Æ÷µÄ´æÔÚ¡£ ¸öÈËÀí½âµÄÀ¬»øÊÕ¼¯Æ÷µÄÖ´ÐÐÔÀí £º ÖÜÆÚÐԵرéÀú±»Ó¦Óõ±Ç°ÒýÓõÄËùÓжÔÏóµÄÁÐ±í¡£ ÔÚÕâ¸öËÑË÷¹ý³ÌÖУ¬·²ÊÇûÓз¢ÏÖµÄ¶Ô Ï󣬶¼½«×¼±¸ÓèÒÔÏú»Ù(µ«²»²¢²»ÊÇÂíÉϾÍÏú»Ù£¬Ö»ÊÇÏȱê¼Ç)¡£ ÕâÖÖËã·¨±íʾÈç¹û¶ÔÏóµÄ×î ºóÒ»¸öÒýÓÃÒ²±»½â³ýʱ£¨Òâ˼ÊǸöÔÏóÔÙÒ²²»Ê¹ÓÃÁË£¬¼´¿ÉÒÔÏú»ÙÁË£©£¬ÕâʱÀ¬»øÊÕ¼¯Æ÷²¢ ²»»áÁ¢¼´½Óµ½Í¨Öª£¬Ö»ÓÐÏÂÒ»´Î¶Ô¶Ñ£¨heap£©½øÐÐÇåɨʱ£¬²ÅÄÜ·¢ÏÖÕâ¸öÇé¿ö¡£ ˵Ã÷Á˶ÔÏó ÔÚʲôʱºòÖÕ½áÊDz»È·¶¨µÄ£¬ÎÒÈÏΪÕâ¾ÍÊÇ·ÇÈ·¶¨ÐÔÖսᡣ½øÒ»²½¶øÑÔ£¬Ö´ÐÐÀ¬»øÊÕ¼¯Çåɨ ´ÎÊýÔ½ÉÙ£¬ÕâÀàËã·¨¹¤×÷µÃÔ½ºÃ¡£Í¨³£À´Ëµ£¬¶ÑµÄºÄ¾¡ÊÇÊÕ¼¯ÇåɨµÄ´¥·¢Ìõ¼þ¡£ ¡¤ Finalize()ºÍDispose()Ö®¼äµÄÇø±ð Finalize×Ô¶¯ÊÍ·Å×ÊÔ´£¬Dispose()ÓÃÓÚÊÖ¶¯ÊÍ·Å×ÊÔ´¡£ Ò». Finalize FinalizeºÜÏñC++µÄÎö¹¹º¯Êý£¬ÎÒÃÇÔÚ´úÂëÖеÄʵÏÖÐÎʽΪÕâÓëC++µÄÎö¹¹º¯ÊýÔÚÐÎʽÉÏÍêÈ«Ò»Ñù£¬µ«ËüµÄµ÷Óùý³ÌÈ´´ó²»Ïàͬ¡£ ~ClassName() {//ÊÍ·ÅÄãµÄ·ÇÍйÜ×ÊÔ´} ±ÈÈçÀàAÖÐʵÏÖÁËFinalizeº¯Êý£¬ÔÚAµÄÒ»¸ö¶ÔÏóa±»´´½¨Ê±£¨×¼È·µÄ˵Ӧ¸ÃÊǹ¹Ô캯Êý±»µ÷ÓÃ֮ǰ£©£¬ËüµÄÖ¸Õë±»²åÈëµ½Ò»¸öfinalizationÁ´±íÖУ»ÔÚGCÔËÐÐʱ£¬Ëü½«²éÕÒfinalizationÁ´±íÖеĶÔÏóÖ¸Õ룬Èç¹û´ËʱaÒѾÊÇÀ¬»ø¶ÔÏóµÄ»°£¬Ëü»á±»ÒÆÈëÒ»¸öfreachable¶ÓÁÐÖУ¬×îºóGC»áµ÷ÓÃÒ»¸ö¸ßÓÅÏȼ¶Ị̈߳¬Õâ¸öÏß³ÌרߺÔð±éÀúfreachable¶ÓÁв¢µ÷ÓöÓÁÐÖÐËùÓжÔÏóµÄFinalize·½·¨£¬ÖÁ´Ë£¬¶ÔÏóaÖеķÇÍйÜ×ÊÔ´²ÅµÃµ½ÁËÊÍ·Å£¨µ±È»Ç°ÌáÊÇÄãÕýȷʵÏÖÁËËüµÄFinalize·½·¨£©£¬¶øaËùÕ¼ÓõÄÄÚ´æ×ÊÔ´Ôò±ØÐèµÈµ½ÏÂÒ»´ÎGC²ÅÄܵõ½ÊÍ·Å£¬ËùÒÔÒ»¸öʵÏÖÁËFinalize·½·¨µÄ¶ÔÏó±ØÐèµÈÁ½´ÎGC²ÅÄܱ»ÍêÈ«ÊÍ·Å¡£ ÓÉÓÚFinalizeÊÇÓÉGC¸ºÔðµ÷Óã¬ËùÒÔ¿ÉÒÔ˵ÊÇÒ»ÖÖ×Ô¶¯µÄÊÍ·Å·½Ê½¡£µ«ÊÇÕâÀïÃæҪעÒâÁ½¸öÎÊÌ⣺µÚÒ»£¬ÓÉÓÚÎÞ·¨È·¶¨GCºÎʱ»áÔË×÷£¬Òò´Ë¿ÉÄܺܳ¤µÄÒ»¶Îʱ¼äÀï¶ÔÏóµÄ×ÊÔ´¶¼Ã»Óеõ½ÊÍ·Å£¬Õâ¶ÔÓÚһЩ¹Ø¼ü×ÊÔ´¶øÑÔÊǷdz£ÒªÃüµÄ¡£µÚ¶þ£¬ÓÉÓÚ¸ºÔðµ÷ÓÃFinalizeµÄÏ̲߳¢²»±£Ö¤¸÷¸ö¶ÔÏóµÄFinalizeµÄµ÷ÓÃ˳Ðò£¬Õâ¿ÉÄÜ»á´øÀ´Î¢ÃîµÄÒÀÀµÐÔÎÊÌâ¡£Èç¹ûÄãÔÚ¶ÔÏóaµÄFinalizeÖÐÒýÓÃÁ˶ÔÏób£¬¶øaºÍbÁ½Õ߶¼ÊµÏÖÁËFinalize£¬ÄÇôÈç¹ûbµÄFinalizeÏȱ»µ÷ÓõĻ°£¬ËæºóÔÚµ÷ÓÃaµÄFinalizeʱ¾Í»á³öÏÖÎÊÌ⣬ÒòΪËüÒýÓÃÁËÒ»¸öÒѾ±»ÊͷŵÄ×ÊÔ´¡£Òò´Ë£¬ÔÚFinalize·½·¨ÖÐÓ¦¸Ã¾¡Á¿±ÜÃâÒýÓÃÆäËûʵÏÖÁËFinalize·½·¨µÄ¶ÔÏó¡£ ¿É¼û£¬ÕâÖÖ¡°×Ô¶¯¡±ÊÍ·Å×ÊÔ´µÄ·½·¨²¢²»ÄÜÂú×ãÎÒÃǵÄÐèÒª£¬ÒòΪÎÒÃDz»ÄÜÏÔʾµÄµ÷ÓÃËü£¨Ö»ÄÜÓÉGCµ÷Óã©£¬¶øÇÒ»á²úÉúÒÀÀµÐÍÎÊÌâ¡£ÎÒÃÇÐèÒª¸ü׼ȷµÄ¿ØÖÆ×ÊÔ´µÄÊÍ·Å¡£ ¶þ. Dispose DisposeÊÇÌṩ¸øÎÒÃÇÏÔʾµ÷Óõķ½·¨¡£ÓÉÓÚ¶ÔDisposeµÄʵÏÖºÜÈÝÒ׳öÏÖÎÊÌ⣬ËùÒÔÔÚһЩÊé¼®ÉÏ£¨È硶Effective C#¡·ºÍ¡¶Applied Microsoft.Net Framework Programming¡·£©¸ø³öÁËÒ»¸öÌض¨µÄʵÏÖģʽ£º class DisposePattern :IDisposable { private System.IO.FileStream fs = new System.IO.FileStream(¡°test.txt¡±, System.IO.FileMode.Create); ~DisposePattern() { Dispose(false); } IDisposable Members#region IDisposable Members public void Dispose() { //¸æËßGC²»ÐèÒªÔÙµ÷ÓÃFinalize·½·¨£¬ //ÒòΪ×ÊÔ´ÒѾ±»ÏÔʾÇåÀí GC.SuppressFinalize(this); Dispose(true); } #endregion protected virtual void Dispose(bool disposing) { //ÓÉÓÚDispose·½·¨¿ÉÄܱ»¶àÏ̵߳÷Ó㬠//ËùÒÔ¼ÓËøÒÔÈ·±£Ḭ̈߳²È« lock (this) { if (disposing) { //˵Ã÷¶ÔÏóµÄFinalize·½·¨²¢Ã»Óб»Ö´ÐУ¬ //ÔÚÕâÀï¿ÉÒÔ°²È«µÄÒýÓÃÆäËûʵÏÖÁËFinalize·½·¨µÄ¶ÔÏó } if (fs != null) { fs.Dispose(); fs = null; //±êʶ×ÊÔ´ÒѾÇåÀí£¬±ÜÃâ¶à´ÎÊÍ·Å } } } } ÔÚ×¢ÊÍÖÐÒѾÓÐÁ˱ȽÏÇå³þµÄÃèÊö£¬ÁíÍ⻹ÓÐÒ»µãÐèҪ˵Ã÷£ºÈç¹ûDisposePatternÀàÊÇÅÉÉú×Ô»ùÀàB£¬¶øBÊÇÒ»¸öʵÏÖÁËDisposeµÄÀ࣬ÄÇôDisposePatternÖÐÖ»ÐèÒªoverride»ùÀàBµÄ´ø²ÎµÄDispose·½·¨¼´¿É£¬¶ø²»ÐèÒªÖØдÎ޲εÄDisposeºÍFinalize·½·¨£¬´ËʱDisposeµÄʵÏÖΪ£º class DerivedClass : DisposePattern { protected override void Dispose(bool disposing) { lock (this) { try { //ÇåÀí×Ô¼ºµÄ·ÇÍйÜ×ÊÔ´£¬ //ʵÏÖģʽÓëD |