gpt4 book ai didi

C# 应用程序域到底是什么?

转载 作者:行者123 更新时间:2023-12-05 01:42:46 26 4
gpt4 key购买 nike

我了解应用程序域形式:

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

但是进程也是如此

  1. 有人可以帮助我了解应用程序域的实际好处吗?
  2. 我假设应用程序域为您提供了一个容器来加载一个版本的程序集,但最近我发现可以在一个应用程序域中加载多个版本的强键程序集。

我对应用领域的概念还不是很清楚。而且我很难理解为什么在存在过程概念的情况下实现这个概念。

谢谢。

最佳答案

我无法判断您是在笼统地谈论还是具体地谈论 .NET 的 AppDomain

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

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

很简单吧?嗯,你希望。事实证明,您的 worker 库容易引发异常,使用 static 配置,并且通常只是一个真正的 PITA。

您可以尝试在它们自己的进程中启动它们,但要监视它们,您需要实现命名管道或尝试仔分割析进程的 STDIN 和 STDOUT。

你还能做什么? AppDomain 实际上解决了这个问题。我可以为每个工作人员生成一个 AppDomain,给他们自己的配置,他们不能通过更改 static 属性来互相搞砸,因为他们是孤立的,而且最重要的是,如果图书馆爆炸了而且我没有发现异常,它不会打扰他们域中的工作人员。而在这一切期间,我仍然可以轻松地与那些 worker 交流。

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

编辑:开始将其写为评论回复,但太大了

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

在我上面给出的场景中,我看到进程的主要问题是进程有自己的缺点,这些缺点更容易通过 AppDomain 来缓解。

进程可能会变得异常、变得无响应、崩溃或随时被杀死。

如果您正在管理流程,则需要跟踪流程 ID 并监控其状态。 IPC 很棒,但是根据需要来回进行适当的通信确实需要时间。

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

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

与编程中的任何事物一样,有 1,000 种不同的方法可以实现相同的目标。由您决定您认为最合适的解决方案。

关于C# 应用程序域到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com