ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

.net³ÌÐòÔ±ÃæÊÔÓ¦ÖªÓ¦»á(¶þ)
2014-11-24 01:26:03 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:308´Î
Tags£º.net ³ÌÐòÔ± ÃæÊÔ Ó¦ÖªÓ¦
½Ð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
Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 ÏÂÒ»Ò³ βҳ 2/3/3
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£º.netÃæÊÔÎÊÌâ¹éÄÉ ÏÂһƪ£ºC++±à³Ì£¬Êý¾Ý½á¹¹£¬Ëã·¨ÀàÃæÊÔÌâ..

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿