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

推荐答案

嗯,我认为这条线索正在顺利地得出最终结论,但最终,情况并非如此.

我会根据自己的理解和我在其他网站上读到的内容来回答这个问题.

首先,我自己尽量避免使用除应用程序池之外的术语"回收",因为这可能会让人感到困惑.现在,转到Process、Pools和AppDomain,我看到的情况如下所示:

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

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

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

网状物配置,

可能还有其他人.

AppDomain是相互隔离的,这完全有意义.如果不是这样,如果更改了web.config(比方说,更改了应用程序1的请求回收池),则分配给该池的所有其他应用程序都将重新启动,这绝对不是Microsoft和其他任何人所希望的.

总结一下我的观点,

  • 进程(W3WP.exe)

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

  • 进程是彼此隔离的内存区域
  • AppDomains是在同一进程中彼此隔离的子内存区域
  • 全局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相关问答推荐

web.config 部分的单独配置文件

ASP.NET - 在屏幕底部显示应用程序构建日期/信息

ReportViewer 控件 - 高度问题

在构建时自动停止/重新启动 ASP.NET 开发服务器

无法获取项目引用的依赖项

跨子域共享 ASP.NET cookie

如何在 Kendo UI 中获取下拉列表中选定项目的文本?

使用 gridview asp.net 进行排序和分页

使用域用户的 SQL 连接字符串?

UseSqlServer 方法缺少 MVC 6

如何从 SQL Server 2008 本身获取客户端 IP 地址?

如何以编程方式将标签的前景色设置为其默认值?

使用 LINQ 进行递归控制搜索

ASP.NET web.config:system.web.compilation 中的 debug 属性的默认值是什么?

web.config 中与 targetFramework 相关的配置错误

在 ASP.NET 中使用 MasterPages 时使用 JQuery 的正确方法?

回发后运行javascript函数

DateTime.Parse 和 Convert.ToDateTime 之间有什么区别?

如何在服务器控件属性中使用 ASP.NET <%= 标签?

如何检索 X509Store 中的所有证书