【问题标题】:What cases to use Application Domain?什么情况下使用Application Domain?
【发布时间】:2011-11-04 01:30:02
【问题描述】:

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

任何人都可以举一些例子在实践中使用它。有例子的源代码很好。而且我想知道是否有任何 Microsoft 的应用程序可以使用这项技术。

谢谢。

【问题讨论】:

  • AppDomain 与线程没有任何关系

标签: c# .net


【解决方案1】:

如果您在主 AppDOmain 中加载 dll,则无法将其卸载。但是,如果您在 AppDOmain 中加载 .dll,您可以卸载 AppDomain 并卸载 dll。像这样你可以加载和卸载 dll。

我看到通过 Addin 可以安全地在 AppDomain 中加载插件,这样插件就不会危及主要软件的安全性。

【讨论】:

    【解决方案2】:

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

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

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

    希望对你有所帮助:)

    【讨论】:

      【解决方案3】:

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

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

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

      如果一个程序集被加载到默认应用程序域中,它 进程运行时无法从内存中卸载。然而, 如果您打开第二个应用程序域来加载和执行 程序集,当该应用程序域被卸载时,程序集被卸载 卸载。使用这种技术来最小化 偶尔使用大型 DLL 的长时间运行的进程。

      【讨论】:

        猜你喜欢
        • 2016-12-22
        • 1970-01-01
        • 2011-02-06
        • 2017-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-25
        • 2011-07-08
        相关资源
        最近更新 更多