我在.NET中阅读了关于Application Domain的概念。但是,我不知道何时使用它。应用程序域作为进程中的线程运行。进程将具有多于或等于一个应用程序域。但是,我可以在不使用应用程序域的情况下部署具有多线程的进程。
任何人都可以告诉一些例子在实践中使用它。有一些例子的源代码是好的。我想知道有任何微软的应用程序可以使用这项技术。
感谢。
答案 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的长时间运行的进程。