多个 Assembly.Load(Byte[]),相同的实例或泄漏?

Posted

技术标签:

【中文标题】多个 Assembly.Load(Byte[]),相同的实例或泄漏?【英文标题】:Multiple Assembly.Load(Byte[]), same instance or leak? 【发布时间】:2009-10-12 12:50:10 【问题描述】:

当我使用包含相同程序集的 Byte 数组多次调用 Assembly.Load(Byte[]) 时会发生什么?

每次调用都会获得相同的 Assembly 实例吗?

同一个程序集在应用域内多次加载???

【问题讨论】:

您实际上会泄漏。我在 2006 年设计的一个服务应用程序就是使用这种方法。由于 Assembly.Load() 的原因,我们不得不每周日重新启动它,因为它占用了 4Gb RAM 和 8Gb 分页。 从技术上讲,这当然不是泄漏。但是,将多个 Assembly 实例加载到 AppDomain 中是没有意义的——您很可能只使用一个,而所有其他实例都只是在消耗服务器内存。 【参考方案1】:

每次调用都会得到一个新的 Assembly 对象,请阅读documentation,在结尾处有一条注释:

“请注意,此方法重载始终会创建一个具有自己映射的新 Assembly 对象。”

【讨论】:

谢谢,我错过了小便条。

以上是关于多个 Assembly.Load(Byte[]),相同的实例或泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

从 byte[] 动态加载程序集

Assembly.Load* 的奇怪问题

Assembly.LoadFrom() 或 Assembly.Load() 能够删除文件

java 工厂assembly.load怎么用

C# Assembly.Load() 方法加载了错误的 dll?

如果在 Windows 服务 .net 可执行文件中调用 .NET Assembly.Load/LoadFrom 会失败