2013-07-25 72 views
0

我有一个单独的ASP.NET MVC 4 web应用程序(扩展了System.Web.HttpApplication的MvcApplication),它托管在IIS 8上。我的应用程序在集成管道模式下的独立应用程序池上运行。这个应用程序池的最大工作进程数被设置为1.一个工作进程中有多少个Web应用程序实例正在运行?

我明白,应用程序实例可能会被合并,并且可能会有多个并行线程,这将为我的应用程序(AppDomain)的同一实例调用Begin_Request/End_Request。 。另外我明白,如果我将“最大工作进程数”设置为大于1,那么肯定会有多个应用程序实例(AppDomain)。

我不明白的是将发出多少次Application_Start调用,以及我的静态变量(存储在MvcApplication中,并且还有一些单例,如NHibernate会话工厂等)中将存在多少个实例时刻。

目前我有一些清理.NET MemoryCache的问题。我的网站的某些用户正在从缓存中接收旧值,因此导致我认为即使将“最大工作进程数”设置为1,我的全局MemoryCache可能也存在多个实例。

什么是我的应用程序静态变量和单例的最大数量,它们将在单个工作进程中并行运行?

是否有任何工具或脚本可以帮助我枚举IIS上的所有AppDomain?

回答

1

我不确定这是否适用于您,但HttpModule Initialize方法被多次调用,因为即使只有一个Application实例。一个HttpApplication可以产生多个HttpModule实例,所以确保这些初始化是线程安全的。

Application_Start_End只会在每个站点启动时触发一次,并停止使用当前设置,因此这不成问题。如果您使用的是HttpContext.Cache对象,你可能在这个答案提到的问题:

HashTable in HttpContext.Current.Cache

如果你愿意,你可以尝试使用WinDbg的和得到什么是你的过程正在进行的转储但这是一种非常严格的策略,可能不会像通过代码查看那么多。直到你看起来有点困难,并且仍然难倒IMO。

相关问题