多次调用Assembly.Load的副作用

23

如果使用Assembly.Load多次,会产生任何副作用吗?

例如:

for (int i = 0; i < N; i++) 
{
   Assembly.Load(assemblyStrongName);
   // .......
}

这会加载程序集一次,对吗?我之前通过 AppDomain.CurrentDomain.GetAssemblies() 进行了检查,在之前和之后似乎只加载了一次(应该是这样的),但是它是否有副作用呢?

在长时间运行的服务器应用程序中(不重启运行数月/数年),上述操作是否会引起任何问题?


2
如果你有一个系统,其中程序集的加载是它持续运行数月/数年的关键部分,我很佩服。 - Damien_The_Unbeliever
1
推论 - 如果你在追踪内存泄漏,使用适当的工具来识别实际泄漏的对象,而不是查看源代码并随意猜测可能是泄漏的内容。 - Damien_The_Unbeliever
1
@Damien_The_Unbeliever:我不是在追踪内存泄漏。直到现在,我从未手动加载过程序集,所以这只是(程序员)的好奇心 :)。 - JohnDoDo
1个回答

25

这会加载程序集一次,是吗?

是的。程序集被加载到当前的 AppDomain,并且只会在该 AppDomain 中加载一次。多次调用此方法只会返回已存在的程序集。


3
不需要 - 它应该只返回现有的程序集。在应用程序域中无法加载一个程序集多次,一旦加载,它将永远不会卸载(直到关闭应用程序域)。 - Reed Copsey
5
如果使用 Assembly.Load(byte[] rawbytes) 方法(参数为字节数组而非文件名),则每次调用该方法都会将程序集添加到集合中(AppDomain.GetAssemblies())。 - J. Ouwehand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接