什么情况下使用Application Domain?

时间:2011-11-04 01:30:03

标签: c# .net

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

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

感谢。

3 个答案:

答案 0 :(得分:2)

如果您在主AppDOmain中加载了一个dll,则无法取消它。但是如果你在AppDOmain中加载.dll,你可以卸载AppDomain,然后卸载dll。就像那样,你可以加载和卸载DLL。

使用Addin我看到你可以在AppDomain中加载安全插件,以便插件不会破坏主要的软件安全性。

答案 1 :(得分:2)

我想从我之前的一个项目中解释AppDomains在真实世界设计问题中的用法。

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

所以我们所做的是,我们使用AppDomain概念加载我们的dll,它执行此扫描工作,还有更多(专有逻辑)到我们为每个端口创建的6个AppDomain中。事实上,一旦您扫描端口以获取某些数据,此dll会在内部生成更多线程以执行各种作业。因此,我们完全隔离了每个端口扫描,当用户想要停止扫描其中一个端口时(通过UI选择),我们只需要优雅地卸载这个AppDomain。

希望对你有所帮助:)

答案 2 :(得分:1)

MSDN确实清楚地说明了AppDomains的实际用途:http://msdn.microsoft.com/en-us/library/system.appdomain.aspx

由AppDomain对象表示的应用程序域有助于为执行托管代码提供隔离,卸载和安全边界。

  

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

     

如果程序集已加载到默认应用程序域中,则为   在进程运行时无法从内存中卸载。然而,   如果您打开第二个应用程序域来加载并执行   程序集,该应用程序域时卸载程序集   卸载。使用此技术可以最小化工作集   偶尔使用大型DLL的长时间运行的进程。