当前位置:  开发笔记 > 编程语言 > 正文

在C#中使用AppDomain

如何解决《在C#中使用AppDomain》经验,为你挑选了4个好方法。

App #mains在C#中最重要的用途是什么?



1> Marc Gravell..:

一个最重要的用途是你的代码必须有一个 -即在C#写的一切在执行AppDomain.这非常重要;-p

如果您的意思是其他应用领域:

当使用插件和其他不受信任的代码时,它允许您同时隔离和卸载它们(您无法卸载程序集 - 只有整个应用程序域).

我目前正在使用它来加载动态生成的dll,以便我可以卸载它们.

它们还允许您设置不同的配置文件,信任级别等 - 但具有相关的复杂性和远程处理成本.

MSDN在此处有关于app-domains的部分.



2> Brian Rasmus..:

我无法告诉你最重要的用途是什么,因为这取决于具体情况.

AppDomains对于应用程序的沙盒部分非常有用.您可以在AppDomain中加载扩展并再次卸载它们 - 否则您无法执行此操作.您可以为AppDomains分配特定权限.不同AppDomains中的每个默认对象都无法相互访问.

AppDomains可以被视为轻量级进程,因为它们为您提供了许多相同的功能.但是,与Process新AppDomains不同,默认情况下没有自己的线程.您必须自己管理AppDomains和线程.

此外,AppDomains都共享相同的托管堆.这通常不是问题,但它可能会产生令人惊讶的效果,因为某些实例(如字符串)在AppDomains之间共享.对于常规使用,这不是问题,但如果使用字符串进行锁定,则不同AppDomain中的线程可能会相互影响.


关于字符串的好注意.
"AppDomains都共享相同的托管堆." 这是否意味着他们还共享静态类或静态方法?

3> Hoghweed..:

一般来说,使用AppDomains不是那么日常的编码实践,这可以被认为是一种先进的概念..但是,从这个简单的事情开始,更好地理解"AppDomain"这个词背后的概念很重要.

在体系结构方面,尽可能简单,AppDomain即使在内存寻址方面也是一个隔离容器,在其内部加载和执行应用程序所需的所有程序集,即使这个概念更加复杂,需要详细解释(我希望这不是关于如此深入的问题).

从那里开始,AppDomain类首先用于获取对应用程序相关的执行应用程序域的访问,这可以通过Singleton属性实现来完成AppDomain.CurrentDomain.通过这种方式,可以:

    获取访问加载的程序集;

    获取对appdomain共享数据槽的访问权限;

    intems编组,就从已创建域中的已加载程序集中展开创建的实例而言.

然后,AppDomain类用于:

    在同一过程中创建更多"域";

    在过程中执行程序集;

    管理appdomain的加载/卸载过程.

查看新的Microsoft框架(尚未发布)MEF(Managed Exteibility Framework)的代码可能很有用,它真正基于AppDomains创建和卸载,动态加载程序集等概念.

作为您可以使用AppDomains执行操作的简单示例和示例,我可以共享此链接.

我希望我回答你的问题.



4> Shivprasad K..:

AC#AppDomain是一个逻辑上隔离的容器,其中运行.NET代码.当您运行任何.NET代码时,它始终在默认的appdomain中运行.

看这30分钟youtube video 什么是C#AppDomain?它更详细地解释了AppDomain.

C#Appdomain

但是,让我仍然试着更详细地解释一下.假设您获得了第三方DLL,并且您希望在应用程序中使用它.但您也怀疑第三方可能有一些恶意代码,因此您希望在受限环境中运行第三方DLL.就像你不希望第三方访问你的c:驱动器或删除文件等等.

因此,您可以创建两个AppDomains,一个用于第三方,一个用于您自己的C#类.对于第三方应用程序域,您将应用无法访问c:驱动器的安全性约束,对于您的C#DLL,您将拥有一个不受限制的应用程序域.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有