假设我多次使用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 :(得分:1)
以下是文档的链接: http://msdn.microsoft.com/en-us/library/b61s44e8.aspx
请注意备注中的内容:
LoadFile在这种有限的场景中很有用,因为LoadFrom不能用于加载具有相同身份但路径不同的程序集;它只会加载第一个这样的组件。
我带走的是,如果路径不同,它将为每个呼叫加载程序集。但如果路径相同则不会。
但是像@unholysampler说的那样你可以很容易地测试这个以确认。
答案 1 :(得分: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...
}
}