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

潮起潮落 2014-02-18 11:02:49
有人说是razor文件预编译影响了这个时间,个人没有完全去证实(使用RazorGenerate或者其他可以事先编译razor文件,规避预编译)。

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

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

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

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

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

5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。
...全文
1312 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltcszk 2014-02-19
  • 打赏
  • 举报
回复
引用 12 楼 KongHuLu 的回复:
[quote=引用 11 楼 ltcszk 的回复:] [quote=引用 8 楼 KongHuLu 的回复:] [quote=引用 5 楼 webdiyer 的回复:] 你可以试试这个IIS模块:Application Initialization Module for IIS 7.5
看到dudu也说到了这个 感觉很对症 我安装个试一下先 这个是不是只对IIS7.5和之后的版本有效呢[/quote] iis8内置了[/quote] 嗯。刚刚在win server 2012 + iis8上测试成功了。 win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。 IIS应用程序-高级设置里面也没有“启用预加载”这一项。[/quote] 要在iis7.5里进行可视化操作的话需要另一个插件 http://files.dotblogs.com.tw/jaigi/1306/2013619347830.zip
md5e 2014-02-19
  • 打赏
  • 举报
回复
我本地测试,好像除了重启设备,没有发现回收会出现第一次访问慢的情况 你看看你的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>
潮起潮落 2014-02-19
  • 打赏
  • 举报
回复
引用 11 楼 ltcszk 的回复:
[quote=引用 8 楼 KongHuLu 的回复:] [quote=引用 5 楼 webdiyer 的回复:] 你可以试试这个IIS模块:Application Initialization Module for IIS 7.5
看到dudu也说到了这个 感觉很对症 我安装个试一下先 这个是不是只对IIS7.5和之后的版本有效呢[/quote] iis8内置了[/quote] 嗯。刚刚在win server 2012 + iis8上测试成功了。 win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。 IIS应用程序-高级设置里面也没有“启用预加载”这一项。
ltcszk 2014-02-19
  • 打赏
  • 举报
回复
引用 8 楼 KongHuLu 的回复:
[quote=引用 5 楼 webdiyer 的回复:] 你可以试试这个IIS模块:Application Initialization Module for IIS 7.5
看到dudu也说到了这个 感觉很对症 我安装个试一下先 这个是不是只对IIS7.5和之后的版本有效呢[/quote] iis8内置了
本拉灯 2014-02-19
  • 打赏
  • 举报
回复
IIS一般都设在半夜2-5点左右回收这时访问量最少
q107770540 2014-02-19
  • 打赏
  • 举报
回复
.NET的程序,不止WEB,第一次运行都比较慢
潮起潮落 2014-02-19
  • 打赏
  • 举报
回复
引用 5 楼 webdiyer 的回复:
你可以试试这个IIS模块:Application Initialization Module for IIS 7.5
看到dudu也说到了这个 感觉很对症 我安装个试一下先 这个是不是只对IIS7.5和之后的版本有效呢
风一样的大叔 2014-02-19
  • 打赏
  • 举报
回复
引用 4 楼 KongHuLu 的回复:
[quote=引用 3 楼 sp1234 的回复:] [quote=引用 楼主 KongHuLu 的回复:] 5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。
简单有时候是最好的。 没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。[/quote] 结合一楼的所说,可以半夜3点回收,然后写个服务半夜3点15访问一次。进程空闲超时设置为24小时。[/quote] 这个可以
Ahoo 2014-02-19
  • 打赏
  • 举报
回复
个人觉得 这是可以接受的. 要是实在不忍接受,那就预编译吧.
webdiyer 2014-02-19
  • 打赏
  • 举报
回复
你可以试试这个IIS模块:Application Initialization Module for IIS 7.5
潮起潮落 2014-02-19
  • 打赏
  • 举报
回复
引用 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和之后的版本有效呢[/quote] iis8内置了[/quote] 嗯。刚刚在win server 2012 + iis8上测试成功了。 win7+iis7.5测试发现不好使啊,装了微软提供的那个扩展之后又重启,windows添加删除功能那里IIS下面依然不见“应用程序初始化”这一项。 IIS应用程序-高级设置里面也没有“启用预加载”这一项。[/quote] 要在iis7.5里进行可视化操作的话需要另一个插件 http://files.dotblogs.com.tw/jaigi/1306/2013619347830.zip[/quote] 装了再重启还是不好使啊0.0 是我搞的方式不对吗。 7.5就先不搞了,因为目前服务器是IIS8。 修改的配置如下: 应用程序池-高级设置-启动模式:AlwaysRunning 应用程序池-高级设置-进程模型-闲置超时:1740 (分钟) 应用程序-高级设置-常规-预加载已启用:True 改了这三处,目前看来是没问题。先结贴了。
潮起潮落 2014-02-19
  • 打赏
  • 举报
回复
引用 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,去掉非系统的引用,也还是这样,又排除了这一项。
潮起潮落 2014-02-18
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
[quote=引用 楼主 KongHuLu 的回复:] 5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。
简单有时候是最好的。 没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。[/quote] 结合一楼的所说,可以半夜3点回收,然后写个服务半夜3点15访问一次。进程空闲超时设置为24小时。
  • 打赏
  • 举报
回复
引用 楼主 KongHuLu 的回复:
5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。
简单有时候是最好的。 没有必要29小时才去访问一次。10分钟去一次也可以,也不会对它增加半点可见的负载,反而是访问价值很高。
种草德鲁伊 2014-02-18
  • 打赏
  • 举报
回复
启动速度真心没办法解决
黄亮 2014-02-18
  • 打赏
  • 举报
回复
可以固定回收时间到半夜,应用程序池可以修改的。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧