2010-12-22 57 views
2

假設我多次使用DLL的名稱調用Assembly.LoadFile。是否在給定的進程/應用程序域中加載了多次調用LoadFile方法或僅加載一次?僅加載程序集

考慮一下:

class Program 
    { 
     static void Main(string[] args) 
     { 
      DoSomething(); 
      DoSomeMoreStuff(); 

      // More of such method calls that each 
      // call Assembly.LoadFile() 
     } 

     static void DoSomething() 
     { 
      var asm = Assembly.LoadFile("SomeExternal.dll"); 

      // stuff happens... 
     } 

     static void DoSomeMoreStuff() 
     { 
      var asm = Assembly.LoadFile("SomeExternal.dll"); 

      // stuff happens... 
     } 
    } 

如果加載程序集多次通話,是有辦法,我可以防止這種情況發生?

+0

出於好奇,你想完成什麼?或者這個問題純粹是爲了知識? – 2010-12-22 17:52:25

+0

Assembly.LoadFile需要絕對文件路徑 – lesscode 2010-12-22 18:03:10

回答

0

LoadFile()的文檔似乎沒有說如果它導入多次,所以我會假設它的確如此,直到另外告知。好消息是,做你自己並不難。

class Program 
{ 
    private static Assembly _asm; 

    private static Assembly getExternalDll() 
    { 
    if (_asm == null) 
     _asm = Assembly.LoadFile("SomeExternal.dll"); 
    return _asm; 
    } 

    static void Main(string[] args) 
    { 
    DoSomething(); 
    DoSomeMoreStuff(); 

    // More of such method calls that each 
    // call Assembly.LoadFile() 
    } 

    static void DoSomething() 
    { 
    var asm = getExternalDll(); 
    // stuff happens... 
    } 

    static void DoSomeMoreStuff() 
    { 
    var asm = getExternalDll(); 
    // stuff happens... 
    } 
} 
1

下面是對文件的鏈接: http://msdn.microsoft.com/en-us/library/b61s44e8.aspx

通知它所在的言論說:

的LoadFile在這個有限的情況下非常有用,因爲LoadFrom不能用於加載組件,其具有相同的身份但路徑不同;它只會加載第一個這樣的程序集。

我拿走的是,如果路徑不同,它會爲每次調用加載程序集。但是,如果路徑相同,那麼它不會。

但是像@unholysampler說你可以很容易地測試這個來確認。