什么情况下使用应用程序域
本文关键字:应用程序域 情况下 什么情况 什么 | 更新日期: 2023-09-27 18:13:40
我阅读了。net中应用程序域的概念。然而,我不知道什么时候使用它。应用程序域作为进程中的线程工作。一个进程将有多个或等于一个应用程序域。但是,我可以不使用应用程序域部署多线程进程。
任何人都可以举出一些在实践中使用它的例子。有源代码的例子很好。我想知道是否有任何微软的应用程序使用这项技术。
谢谢。
如果你在主AppDOmain中加载了一个dll,你就不能卸载它。但是如果你在AppDOmain中加载。dll你可以卸载AppDOmain,然后卸载dll。这样你就可以加载和卸载dll了。
和外接程序我看到,您可以加载插件与安全AppDomain,为了使插件不能妥协的主要软件安全。
我想从我早期的一个项目中解释AppDomains在实际设计问题中的使用。
基本上,这个项目是一个端口扫描器,用于某些信息。我们有6个端口,我们应该并行扫描6个端口。当然,我们可以使用线程,但这样隔离就根本不可能了。我们希望每个端口功能,即扫描应该完全隔离,甚至它的数据存储和其他功能都是独立的。
所以我们所做的是,我们使用AppDomain的概念在加载我们的dll,它做这个扫描工作和更多的(专有逻辑)到我们为每个端口创建的6个AppDomain。事实上,一旦扫描端口以获取某些数据,该dll会在内部生成更多线程来执行各种任务。因此,我们已经完全隔离了每个端口扫描,当用户想要停止扫描一个端口(通过UI选择)时,我们只需要优雅地卸载这个AppDomain。
希望对你有所帮助。
MSDN确实在这里给出了AppDomains实际用于什么的清晰图片:http://msdn.microsoft.com/en-us/library/system.appdomain.aspx
应用程序域,由AppDomain对象表示,有助于为执行托管代码提供隔离、卸载和安全边界。
使用应用程序域来隔离可能导致故障的任务的过程。如果正在执行任务的AppDomain的状态变为不稳定时,可以卸载AppDomain而不影响进程。当流程必须长时间运行时,这一点非常重要重新启动。您还可以使用应用程序域来隔离任务不应该共享数据
如果将程序集加载到默认应用程序域中,则它进程运行时无法从内存中卸载。然而,如果打开第二个应用程序域来加载和执行程序集时,将在该应用程序域为时卸载该程序集卸载。使用此技术可以最小化的工作集偶尔使用大型dll的长时间运行进程