Scenario:我有一个n层企业ASP.NET应用程序使用Web部署项目进行部署.所有层都会生成ASP使用的独立程序集.NET应用程序.

当我运行这个应用程序时,Problem:.在部署之后,第一次将依赖程序集加载到内存中需要花费大量时间.但一旦加载了它的快速照明应用程序.如果没有用户访问应用程序,IIS会从内存中卸载程序集,当用户try 在以后的实例上访问该应用程序时,它会再次加载所有程序集,加载时间与第一次加载的时间相同.

I'm looking for a solution that enables me to keep my assemblies loaded into memory persistently overriding the volatile nature of assemblies towards memory residency.

或任何其他解决方案,让我的用户愉快地使用应用程序解决上述问题.

推荐答案

In IIS 6, go to the Application Pools section, and right-click > Properties on the pool which hosts the ASP.NET application in question. Go to the Performance tab and uncheck "Shutdown worker processes after being idle for:"

IIS 7中,转到连接窗格并查找应用程序池,然后为承载应用程序的池 Select 高级设置.找到"空闲超时"属性并将其设置为"0"(这将禁用它).

默认值为20分钟不活动.通过取消复选框,一旦worker process加载了AppDomain,它就永远不会死(除非你终止了这个过程或者其他什么).默认情况下,IIS在达到某个限制(如内存上限)时将恢复recycle the process,但它也将启动一个新的请求,并"逐步覆盖"所有传入的请求,直到旧的请求未被使用,以便将中断降至最低.

我还写了一个小c#类,在正常情况下keep your ASP.NET application alive(alternate archived version).由于它在应用程序中运行,显然它无法阻止IIS或其他任何东西显式终止进程,但它将使应用程序保持"热",例如,应用程序将永远不会闲置足够长的时间,以便IIS决定关闭它.

如果您不能直接控制您的IIS配置(例如,共享主机),最好的办法是让一个小应用程序在单独的系统上运行-比方说,一个始终在线的 workstation -该系统每x分钟访问您的站点一次,以防止应用程序池超时.没什么特别的-控制台应用程序中一个简单的WebRequest和while()循环就可以了.

Asp.net相关问答推荐

更新剃须刀页面中图表的值

如何格式化搜索字符串以从 Razor 页表中的多个列返回部分搜索字符串?

如何从 Azure 上托管的应用服务获取登录用户名?

从数据库中检索数据的最快方法

Firefox 和 Chrome 之间 1 像素的行高差

使 ASP.NET WCF 将字典转换为 JSON,省略键和值标签

如果站点在 localhost 或 127.0.0.1 上运行,如何判断 ASP.NET MVC 视图

在 ASP.NET Core 1.0 上处理大文件上传

将数据表导出到 Excel 文件

您正在使用哪些身份验证和授权方案 - 为什么?

如何忽略身份框架的魔力,只使用 OWIN 身份验证中间件来获取我寻求的声明?

使 WCF Web 服务与 GET 请求一起工作

在 ASP.NET 标识中添加角色

使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?

服务器标签格式不正确错误

ConfigurationManager.AppSettings 缓存

try 为 Medium Trust 开发是否会失败?

无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port

如何检索 X509Store 中的所有证书

.Net 上是否有 URL 验证器?