C#什么是应用领域?

C#什么是应用领域?,c#,.net,multithreading,clr,C#,.net,Multithreading,Clr,我了解到,申请域表单: 安全的隔离边界, 版本控制, 可靠性, 以及托管代码的卸载 但过程也是如此 有人能帮我了解应用领域的实际好处吗 我假设app domain为您提供了一个容器来加载程序集的一个版本,但最近我发现可以在app domain中加载多个版本的强密钥程序集 我对应用领域的概念还不清楚。我很难理解为什么这个概念是在过程的概念存在的情况下实现的 多谢各位 使用app domain的一些实际好处: 一个进程中可以运行多个应用程序域。您还可以停止单个应用程序域,而无需停止整个过程。这本身

我了解到,申请域表单:

安全的隔离边界, 版本控制, 可靠性, 以及托管代码的卸载

但过程也是如此

  • 有人能帮我了解应用领域的实际好处吗
  • 我假设app domain为您提供了一个容器来加载程序集的一个版本,但最近我发现可以在app domain中加载多个版本的强密钥程序集 我对应用领域的概念还不清楚。我很难理解为什么这个概念是在过程的概念存在的情况下实现的


    多谢各位

    使用app domain的一些实际好处:

    • 一个进程中可以运行多个应用程序域。您还可以停止单个应用程序域,而无需停止整个过程。这本身就大大提高了服务器的可伸缩性

    • 通过运行时主机以编程方式管理应用程序域生命周期(您也可以覆盖它)。对于进程和线程,您必须显式地管理它们的生命周期。初始化、执行、终止、进程间/多线程通信非常复杂,这就是为什么更容易将其推迟到CLR管理


    来源:

    使用app domain的一些实际好处:

    • 一个进程中可以运行多个应用程序域。您还可以停止单个应用程序域,而无需停止整个过程。这本身就大大提高了服务器的可伸缩性

    • 通过运行时主机以编程方式管理应用程序域生命周期(您也可以覆盖它)。对于进程和线程,您必须显式地管理它们的生命周期。初始化、执行、终止、进程间/多线程通信非常复杂,这就是为什么更容易将其推迟到CLR管理


    来源:

    我不知道你是在说一般的还是具体的.NET的
    AppDomain

    我将假设.NET的AppDomain
    AppDomain
    ,以及为什么当您需要在单个进程中进行隔离时,它会非常有用

    例如:
    假设您正在处理一个具有特定辅助类的库,您别无选择,只能使用这些辅助类,并且无法修改代码。您的工作是构建一个Windows服务,该服务管理上述工作人员,并确保他们都保持正常运行,并且需要并行工作

    很简单,对吧?嗯,你希望如此。事实证明,您的工作程序库很容易抛出异常,使用
    静态
    配置,通常只是一个真正的PITA

    您可以尝试在它们自己的进程中启动它们,但是如果要监视它们,则需要实现namedpipes,或者尝试仔细地解析进程的STDIN和STDOUT

    你还能做什么?AppDomain实际上解决了这个问题。我可以为每个工作人员生成一个AppDomain,为他们提供自己的配置,他们不能通过更改
    静态
    属性来破坏彼此,因为它们是隔离的,而且最重要的是,如果库爆炸,我无法捕获异常,这不会影响他们域中的工作人员。在这期间,我仍然可以轻松地与这些工人沟通

    遗憾的是,我以前不得不这么做

    编辑:开始将此作为评论响应编写,但太大

    单个流程在许多情况下都可以很好地工作,但是,有时它们会成为一种痛苦。我不是说一个人应该在另一个进程上使用AppDomain。我认为你需要一个单独的进程或AppDomain是很少见的,但是一旦你需要它,你肯定会知道的

    我在上面给出的场景中看到的流程的主要问题是,流程有自己的缺点,使用AppDomain更容易缓解

    进程在任何时候都可能出现流氓、无响应、崩溃或被杀死

    如果您正在管理流程,则需要跟踪流程ID并监视其状态。IPC很好,但需要时间才能根据需要进行适当的沟通

    例如,假设您的流程刚刚结束。你是做什么的?根据您选择监视的机制,可能是通信线程死机,也可能是工作已完成,而您仍然将其显示为“正在处理”。你是做什么的

    现在,当您有20个流程,而您的管理应用程序死亡时会发生什么。你没有任何真实的信息,你只有20个“myprocess.exe”,现在可能需要开始解析它们开始时使用的命令行参数,以查看实际使用的工作程序。显然,如果使用AppDomain,所有20个人都会死,但你真的从这个过程中获得了什么好处吗?您仍然需要对恢复功能进行编码,但是,现在您还必须为您的流程编写所有恢复代码,而不仅仅是解雇员工


    与编程中的任何东西一样,有1000种不同的方法来实现相同的目标。由您决定您认为哪种解决方案最合适。

    我不知道您是在谈论一般的还是具体的.NET的
    AppDomain

    我将假设.NET的AppDomain
    AppDomain
    ,以及为什么当您需要在单个进程中进行隔离时,它会非常有用

    例如:
    假设您正在处理一个具有特定辅助类的库,您别无选择,只能使用这些辅助类,并且无法修改代码。您的工作是构建一个Windows服务,该服务管理上述工作人员,并确保他们都保持正常运行,并且需要并行工作

    很简单,对吧?嗯,你希望如此。事实证明,您的工作程序库很容易抛出异常,使用
    静态
    配置,通常只是一个真正的PITA

    您可以尝试在他们自己的流程中启动它们,但是