asp.net mvc网站回收后第一次运行奇慢,大家是怎么解决的?
有人说是razor文件预编译影响了这个时间,个人没有完全去证实(使用RazorGenerate或者其他可以事先编译razor文件,规避预编译)。
目前有几个预想的解决方案,看看大家有没有更好更优雅的办法呢?
1.使用RazorGenerate编译Razor文件,这个弊端一是所有cshtml文件都要去修改属性配置,不知道还有没有其他需要改动的,嫌麻烦,而且不知道是不是团队里所有人都得装这个东西。弊端二是把修改即可见的路子堵死了。
2.修改固定回收时间和进程空闲超时时间都为43200(分钟),也就是30天。这样的话30天才有一个人中奖,总比天天有人中奖好多了(原来是29个小时回收一次)。但是不知道服务器扛不扛得住。
3.方案2的衍生版,固定回收时间设置为0,人为去回收,回收完自己点开一次。
4.第一次奇慢,之后速度特别快,也就是说第一次做了之后访问没有做的事(预编译?)。能不能把这个动作找到,在每次回收/进程消亡/32%@#$(也就是系统进行了某些动作,会产生预编译行为,在进行这些动作之后紧接着我们先把这个预编译给搞了)。不知是否有人实现过这类配置。
5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。
------解决方案--------------------可以固定回收时间到半夜,应用程序池可以修改的。
------解决方案--------------------启动速度真心没办法解决
------解决方案--------------------
简单有时候是最好的。
没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。
------解决方案--------------------你可以试试这个IIS模块:Application Initialization Module for IIS 7.5
------解决方案--------------------个人觉得 这是可以接受的.
要是实在不忍接受,那就预编译吧.
------解决方案--------------------
这个可以
------解决方案--------------------.NET的程序,不止WEB,第一次运行都比较慢
------解决方案--------------------IIS一般都设在半夜2-5点左右回收这时访问量最少
------解决方案--------------------
你可以试试这个IIS模块:Application Initialization Module for IIS 7.5
看到dudu也说到了这个
感觉很对症 我安装个试一下先
这个是不是只对IIS7.5和之后的版本有效呢
iis8内置了
------解决方案--------------------我本地测试,好像除了重启设备,没有发现回收会出现第一次访问慢的情况
你看看你的web.config是否有配置
<compilation debug="true">
<assemblies>
<add assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.DirectoryServices.Protocols, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
&