C#中AppDomains最重要的用途是什么?
Answers:
最重要的单一用途是您的代码必须具有一个,即,您在C#中编写的所有内容都在AppDomain
。那很重要;-p
如果您是指其他应用程序域:
使用插件和其他不受信任的代码时,它既可以隔离又可以卸载它们(您不能卸载程序集-只能卸载整个应用程序域)。
我目前正在使用它来加载动态生成的dll,以便可以卸载它们。
它们还允许您设置不同的配置文件,信任级别等-但具有相关的复杂性和远程处理成本。
MSDN在此处提供有关应用程序域的部分。
我无法告诉您最重要的用途是什么,因为这取决于具体情况。
AppDomain对于将应用程序的各个部分进行沙箱处理很有用。您可以在AppDomain中加载扩展,然后再次将其卸载-否则您将无法完成。您可以为AppDomains分配特定权限。默认情况下,不同AppDomain中的对象无法相互访问。
AppDomains可以为您提供许多相同的功能,因此可以看作是轻量级的过程。但是,与Process不同,新的AppDomain在默认情况下没有自己的线程。您必须自己管理AppDomain和线程。
另外,AppDomains都共享相同的托管堆。通常这不是问题,但可能会产生令人惊讶的效果,因为在AppDomain之间共享字符串等某些实例。对于常规使用而言,这不是问题,但是如果使用字符串进行锁定,则不同AppDomain中的线程可能会相互影响。
通常,使用AppDomains并不是日常的编码实践,可以将其视为高级概念。但是,从这个简单的事情开始,更好地理解“ AppDomain”一词背后的概念很重要。
就架构而言,并尽可能简化,即使在内存寻址方面,AppDomain也是一个隔离容器,在其中装入并执行了应用程序所需的所有程序集,即使此概念更复杂以致于无法详细解释。 (我希望这不是您要进一步深入的问题)。
从那里开始,首先使用AppDomain类获取对与应用程序相关的正在执行的应用程序域的访问,这可以通过Singleton属性实现来完成AppDomain.CurrentDomain
。通过这种方式可以:
然后,AppDomain类用于:
查看新的Microsoft框架(尚未发布)MEF(托管扩展框架)的代码可能很有用,该框架真正基于AppDomains创建和卸载,动态加载的程序集等概念。
作为简单的示例以及您可以使用AppDomains进行示例的示例,我可以共享此链接。
希望我回答了你的问题。
AC#AppDomain是一个逻辑隔离的容器,在其中运行.NET代码。当您运行任何.NET代码时,它始终在默认的appdomain中运行。
请观看这30分钟的youtube视频。C#AppDomain是什么?其中详细介绍了AppDomain。
但是,让我仍然尝试更详细地解释。假设您获得了第三方DLL,并且想要在应用程序中使用它。但是您还怀疑第三方可能包含一些恶意代码,因此您想在受限的环境中运行第三方DLL。就像您不希望第三方访问您的c:驱动器或删除文件等。
因此,您可以创建两个AppDomain,一个用于第三方,另一个用于您自己的C#类。对于第三方appdomain,您将应用它不能访问c:驱动器的安全约束,对于C#DLL,您将具有不受限制的应用程序域。
请阅读我的博客,了解DLL的运行时加载和使用AppDomain进行交叉通信的标准应用程序。https://blog.vcillusion.co.in/sending-events-through-application-domain-boundary/