gpt4 book ai didi

asp.net - Appdomain回收到底是什么

转载 作者:行者123 更新时间:2023-12-03 07:02:36 25 4
gpt4 key购买 nike

我想弄清楚Appdomain回收到底是什么?当第一次从 DotNet 应用程序请求 aspx 页面时,我知道会创建该应用程序的应用程序域,并将所需的程序集加载到该应用程序域中,并且将服务该请求。现在,如果web.config文件或bin文件夹的内容等被修改,appdomain将被“回收”。我的问题是,在回收过程结束时,应用程序域是否会加载程序集并准备好服务下一个请求?或者必须请求一个页面才能触发程序集加载?

最佳答案

嗯,我认为这个话题很顺利地得出了最终结论,但最终却并非如此。

我将尝试根据我的理解并利用我刚刚在其他网站上读到的内容来回答这个问题。

首先,除了应用程序池之外,我自己尽量避免使用“回收”一词,因为这可能会让某些人感到困惑。现在,进入进程、池和 AppDomain,我看到的图片如下:

简而言之,应用程序池是由名为 W3WP.exe(又名工作进程)的进程维护和运行的内存区域。回收应用程序池意味着关闭该进程,将其从内存中删除,然后使用新分配的进程 ID 生成一个全新的工作进程。

关于应用程序域,我将其视为内存区域的子集,在上述扮演容器角色的区域内。换句话说,内存中的进程(本例中为 W3WP.exe)是应用程序的宏内存区域,用于存储子区域(称为应用程序域)。尽管如此,内存中的一个进程可能会存储不同的应用程序域,每个应用程序域都分配给在给定应用程序池中运行的每个应用程序。

说到回收,正如我最初所说,我自己只为应用程序池保留一些东西。对于 AppDomains,我更喜欢使用术语“重新启动”,以避免误解。基于此,重新启动AppDomain意味着使用新添加的设置重新启动给定的应用程序,例如刷新现有配置。这发生在称为 AppDomain 的内存子区域的边界内,该子区域最终位于与相应应用程序池关联的进程内。这些新设置可能来自诸如

之类的文件

网络配置,机器配置,全局.asax,bin目录,应用程序代码,

可能还有其他。

AppDomain 彼此隔离,这是完全有道理的。如果不是这样,如果对应用程序 1 的 web.config 进行更改,则需要回收池,分配给该池的所有其他应用程序都将重新启动,这绝对是 Microsoft 和其他任何人所不希望的。

总结我的观点

  • 进程(W3WP.exe)
    • 应用程序域 1
    • 应用程序域 2
    • 应用程序域 3
    • 应用程序域

n = 分配给给定 W3WP.exe 管理的应用程序池的应用程序数量

  • 进程是相互隔离的内存区域
  • AppDomain 是同一进程内相互隔离的子内存区域
  • 全局 IIS 设置更改可能需要应用程序池回收(终止并启动新的工作进程 W3WP.exe)
  • 应用程序范围的设置会更改 AppDomains 问题,并且它们可能会在某些特定文件(例如上面概述的文件)发生更改后重新启动

有关更多信息,我建议:

http://blogs.msdn.com/b/david.wang/archive/2006/03/12/thoughts-on-iis-configuration-changes-and-when-it-takes-effect.aspx

What causes an application pool in IIS to recycle?

http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

来自巴西的问候!

关于asp.net - Appdomain回收到底是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564/

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