asp.net mvc网站回收后第一次运行奇慢,大家是怎么解决的?

时间:2021-03-04 12:28:40
有人说是razor文件预编译影响了这个时间,个人没有完全去证实(使用RazorGenerate或者其他可以事先编译razor文件,规避预编译)。

目前有几个预想的解决方案,看看大家有没有更好更优雅的办法呢?

1.使用RazorGenerate编译Razor文件,这个弊端一是所有cshtml文件都要去修改属性配置,不知道还有没有其他需要改动的,嫌麻烦,而且不知道是不是团队里所有人都得装这个东西。弊端二是把修改即可见的路子堵死了。

2.修改固定回收时间和进程空闲超时时间都为43200(分钟),也就是30天。这样的话30天才有一个人中奖,总比天天有人中奖好多了(原来是29个小时回收一次)。但是不知道服务器扛不扛得住。

3.方案2的衍生版,固定回收时间设置为0,人为去回收,回收完自己点开一次。

4.第一次奇慢,之后速度特别快,也就是说第一次做了之后访问没有做的事(预编译?)。能不能把这个动作找到,在每次回收/进程消亡/32%@#$(也就是系统进行了某些动作,会产生预编译行为,在进行这些动作之后紧接着我们先把这个预编译给搞了)。不知是否有人实现过这类配置。

5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。

16 个解决方案

#1


可以固定回收时间到半夜,应用程序池可以修改的。

#2


启动速度真心没办法解决

#3


引用 楼主 KongHuLu 的回复:
5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。


简单有时候是最好的。

没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。

#4


引用 3 楼 sp1234 的回复:
Quote: 引用 楼主 KongHuLu 的回复:

5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。


简单有时候是最好的。

没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。

结合一楼的所说,可以半夜3点回收,然后写个服务半夜3点15访问一次。进程空闲超时设置为24小时。

#5


你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

#6


个人觉得 这是可以接受的.

要是实在不忍接受,那就预编译吧.

#7


引用 4 楼 KongHuLu 的回复:
Quote: 引用 3 楼 sp1234 的回复:

Quote: 引用 楼主 KongHuLu 的回复:

5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。


简单有时候是最好的。

没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。

结合一楼的所说,可以半夜3点回收,然后写个服务半夜3点15访问一次。进程空闲超时设置为24小时。

这个可以

#8


引用 5 楼 webdiyer 的回复:
你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

#9


.NET的程序,不止WEB,第一次运行都比较慢

#10


IIS一般都设在半夜2-5点左右回收这时访问量最少

#11


引用 8 楼 KongHuLu 的回复:
Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

#12


引用 11 楼 ltcszk 的回复:
Quote: 引用 8 楼 KongHuLu 的回复:

Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

嗯。刚刚在win server 2012 + iis8上测试成功了。
win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。
IIS应用程序-高级设置里面也没有“启用预加载”这一项。

#13


我本地测试,好像除了重启设备,没有发现回收会出现第一次访问慢的情况

你看看你的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"/>
<add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
</compilation>

#14


引用 12 楼 KongHuLu 的回复:
Quote: 引用 11 楼 ltcszk 的回复:

Quote: 引用 8 楼 KongHuLu 的回复:

Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

嗯。刚刚在win server 2012 + iis8上测试成功了。
win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。
IIS应用程序-高级设置里面也没有“启用预加载”这一项。

要在iis7.5里进行可视化操作的话需要另一个插件
http://files.dotblogs.com.tw/jaigi/1306/2013619347830.zip

#15


引用 13 楼 liuchaolin 的回复:
我本地测试,好像除了重启设备,没有发现回收会出现第一次访问慢的情况

你看看你的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"/>
<add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
</compilation>

依旧如故
项目中有很多cshtml文件,怀疑是因此导致的
cshtml页面中默认引入了一些namespace,去掉非系统的引用,也还是这样,又排除了这一项。

#16


引用 14 楼 ltcszk 的回复:
Quote: 引用 12 楼 KongHuLu 的回复:

Quote: 引用 11 楼 ltcszk 的回复:

Quote: 引用 8 楼 KongHuLu 的回复:

Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

嗯。刚刚在win server 2012 + iis8上测试成功了。
win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。
IIS应用程序-高级设置里面也没有“启用预加载”这一项。

要在iis7.5里进行可视化操作的话需要另一个插件
http://files.dotblogs.com.tw/jaigi/1306/2013619347830.zip

装了再重启还是不好使啊0.0  是我搞的方式不对吗。
7.5就先不搞了,因为目前服务器是IIS8。
修改的配置如下:
应用程序池-高级设置-启动模式:AlwaysRunning
应用程序池-高级设置-进程模型-闲置超时:1740 (分钟)

应用程序-高级设置-常规-预加载已启用:True

改了这三处,目前看来是没问题。先结贴了。

#1


可以固定回收时间到半夜,应用程序池可以修改的。

#2


启动速度真心没办法解决

#3


引用 楼主 KongHuLu 的回复:
5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。


简单有时候是最好的。

没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。

#4


引用 3 楼 sp1234 的回复:
Quote: 引用 楼主 KongHuLu 的回复:

5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。


简单有时候是最好的。

没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。

结合一楼的所说,可以半夜3点回收,然后写个服务半夜3点15访问一次。进程空闲超时设置为24小时。

#5


你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

#6


个人觉得 这是可以接受的.

要是实在不忍接受,那就预编译吧.

#7


引用 4 楼 KongHuLu 的回复:
Quote: 引用 3 楼 sp1234 的回复:

Quote: 引用 楼主 KongHuLu 的回复:

5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。


简单有时候是最好的。

没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。

结合一楼的所说,可以半夜3点回收,然后写个服务半夜3点15访问一次。进程空闲超时设置为24小时。

这个可以

#8


引用 5 楼 webdiyer 的回复:
你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

#9


.NET的程序,不止WEB,第一次运行都比较慢

#10


IIS一般都设在半夜2-5点左右回收这时访问量最少

#11


引用 8 楼 KongHuLu 的回复:
Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

#12


引用 11 楼 ltcszk 的回复:
Quote: 引用 8 楼 KongHuLu 的回复:

Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

嗯。刚刚在win server 2012 + iis8上测试成功了。
win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。
IIS应用程序-高级设置里面也没有“启用预加载”这一项。

#13


我本地测试,好像除了重启设备,没有发现回收会出现第一次访问慢的情况

你看看你的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"/>
<add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
</compilation>

#14


引用 12 楼 KongHuLu 的回复:
Quote: 引用 11 楼 ltcszk 的回复:

Quote: 引用 8 楼 KongHuLu 的回复:

Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

嗯。刚刚在win server 2012 + iis8上测试成功了。
win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。
IIS应用程序-高级设置里面也没有“启用预加载”这一项。

要在iis7.5里进行可视化操作的话需要另一个插件
http://files.dotblogs.com.tw/jaigi/1306/2013619347830.zip

#15


引用 13 楼 liuchaolin 的回复:
我本地测试,好像除了重启设备,没有发现回收会出现第一次访问慢的情况

你看看你的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"/>
<add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
</compilation>

依旧如故
项目中有很多cshtml文件,怀疑是因此导致的
cshtml页面中默认引入了一些namespace,去掉非系统的引用,也还是这样,又排除了这一项。

#16


引用 14 楼 ltcszk 的回复:
Quote: 引用 12 楼 KongHuLu 的回复:

Quote: 引用 11 楼 ltcszk 的回复:

Quote: 引用 8 楼 KongHuLu 的回复:

Quote: 引用 5 楼 webdiyer 的回复:

你可以试试这个IIS模块: Application Initialization Module for IIS 7.5

看到dudu也说到了这个
感觉很对症  我安装个试一下先

这个是不是只对IIS7.5和之后的版本有效呢

iis8内置了

嗯。刚刚在win server 2012 + iis8上测试成功了。
win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。
IIS应用程序-高级设置里面也没有“启用预加载”这一项。

要在iis7.5里进行可视化操作的话需要另一个插件
http://files.dotblogs.com.tw/jaigi/1306/2013619347830.zip

装了再重启还是不好使啊0.0  是我搞的方式不对吗。
7.5就先不搞了,因为目前服务器是IIS8。
修改的配置如下:
应用程序池-高级设置-启动模式:AlwaysRunning
应用程序池-高级设置-进程模型-闲置超时:1740 (分钟)

应用程序-高级设置-常规-预加载已启用:True

改了这三处,目前看来是没问题。先结贴了。