Csharp/C#教程:如何使用c#卸载.dll?分享


如何使用c#卸载.dll?

我正在使用.dll引用我的应用程序。 我想在按钮单击事件中卸载.dll。 怎么做 ???

您无法卸载单个程序集 – 您必须卸载整个AppDomain 。 换句话说,您需要在新的AppDomain加载其他程序集(和相关代码),然后当您要卸载它时卸载AppDomain

当然,这会让生活变得更加艰难,因为你不得不担心在AppDomains之间调用调用 – 但这只是.NET所允许的。

正如Jon Skeet所写,您无法卸载DLL,但您可以在另一个AppDomain中加载DLL – 然后卸载AppDomain。 这是唯一的方法。

然而,有些事情你需要变化,因为你自然必须在AppDomain上调用函数。 这可以通过两种不同的方式发生。

如果您来自一个AppDomain(让我们称之为A),获取对在AppDomain B中实例化的对象的引用,则默认行为是该对象跨AppDomain边界序列化。 这意味着A访问的对象实例与B访问的实例不同,并且在A中进行的修改不会反映在B中,除非您提供向对象发送的function。 这要求对象标记为Serializable。

但是,您可以通过让类inheritanceMarshalByRefObject来避免序列化。 如果对象是在AppDomain B中构造的,并且从AppDomain A调用,则调用将跨越AppDomain边界。 它仍然是相同的物理线程,因此您不会像在跨进程调用或COM跨公寓调用中那样拥有线程切换的开销。

但是如果在B中构造一个由A中的对象引用的对象,但是B中的对象不会被访问5分钟,则该对象将被释放。 可以在MarshalByRefObject.InitializeLifetimeService()中重写此行为。

另请参阅实现不带AppDomain的.NET插件的答案。 请注意评论中的讨论,他们指出它非常缓慢地泄漏内存。

上述就是C#学习教程:如何使用c#卸载.dll?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/987394.html

(0)
上一篇 2021年12月22日
下一篇 2021年12月22日

精彩推荐