2011-11-04 65 views
3

我读了关于.NET中的应用程序域的概念。但是,我不知道何时使用它。应用程序域在进程中作为线程工作。一个进程将有多于或等于一个应用程序域。但是,我可以在不使用应用程序域的情况下部署多线程进程。什么情况下使用应用程序域?

任何人都可以告诉一些例子在实践中使用它。有源代码的例子很好。我不知道有任何微软的应用程序使用这种技术。

谢谢。

+2

的AppDomain有**什么**做线程。 – SLaks

回答

2

如果您在主AppDomain中加载DLL不能unlod它。但是,如果您在AppDOmain中加载.dll,则可以卸载AppDomain并卸载该DLL。就像那样,你可以加载和卸载dll。

并与外接我看到你在AppDomain中加载插件与安全,以便该插件不能妥协的主要软件的安全性。

2

我想从我的早期项目之一的AppDomain解释的使用在现实世界的设计问题。

基本上该项目是一个端口扫描仪的一些信息。所以我们有6个端口,我们假设并行扫描6个端口。当然,我们可以使用线程,但是隔离是不可能的。我们希望每个端口的功能,例如扫描应该完全隔离,甚至其数据存储和其他功能是独立的。

因此,我们所做的是,我们使用AppDomain概念来加载我们的dll,它将扫描作业和更多(专有逻辑)转换为我们为每个端口创建的6个AppDomain。事实上,这个DLL会在内部产生更多的线程来执行各种工作,一旦你扫描一些数据的端口。因此,我们完全隔离了每个端口扫描,并且当用户想要停止扫描其中一个端口时(通过UI选择),我们只需要正常卸载此AppDomain。

希望这对你有所帮助:)

1

MSDN的确给人一个清晰的画面在这里的是什么应用程序域实际上为:http://msdn.microsoft.com/en-us/library/system.appdomain.aspx

应用程序域,这是由应用程序域对象表示,帮助提供隔离,卸载以及执行托管代码的安全边界。

使用应用程序域隔离可能会导致进程丢失的任务。如果正在执行任务的AppDomain的状态变为 不稳定,则可以在不影响进程的情况下卸载AppDomain。 当进程必须长时间运行而没有重新启动 时,这非常重要。您还可以使用应用程序域来隔离 不应共享数据的任务。

如果一个组件被加载到默认应用程序域,它 不能从存储器:当所述工艺运行卸载。然而, 如果你打开第二个应用程序域加载并执行 组件,该组件时的应用领域是 卸载卸载。使用此技术可最大限度地减少偶尔使用大型DLL的长时间运行的进程的工作集。

相关问题