2010-12-22 41 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说你可以很容易地测试这个来确认。