ASP.NET热启动,ASP.NET MVC自动启动,解决ASP.NET第一次访问速度慢加速
2012-12-22 11:35
381 查看
众所周知ASP.NET第一次访问时需要JIT编译,这就导致了ASP.NET程序第一次访问速度特别慢,尤其是ASP.NET MVC Razor模板引擎是解释型的,第一次还会将它编译一次,从前我们经常会说第一个人访问的都是人品有问题的,但是应用程序池会每过20分钟自动回收一次,也就是说每20分钟就要做一次人品有问题的人。嘿嘿,对于技术人员来说这当然没有什么,但是对于不太懂技术的客户可能就觉得非常莫名其妙了。
在IIS7.5之前我们想让我们只能设置的ASP.NET应用程序应用程序池的回收时间,比如设一个超大的时间,但是这样做只是防止了应用程序池定时回收,却不能解决重启后,或是其它原因进程回收后每一个人访问的慢的“人品问题”,所以微软在IIS7.5 WINDOWS 2008带的IIS上增加一个叫做热启动的功能。
热启动的原理很简章,就是在IIS的配置文件中做一些设定并指定一个继承自IProcessHostPreloadClient的类,然后告诉IIS说,如果哪个应用程序池回收了再次激活启动的时候就执行一下这家伙,而这家伙的功能基本上就是初始化系统的数据啦,把数据缓存到内存里啦等等这些。如此这般之后,当系统干完活儿的时候,真正访问的用户打开站点的时候会惊奇的发现,第一次访问也不慢啦,再不也用做人品不好的人了,从此腰也不酸了腿也不疼了一口气能上五楼了*^_^ *。这么好用的功能到底要怎么使用呢?
一、首先实现继承自IProcessHostPreloadClient的类:
[/code]
这段代码做的一件事情就是在热启动时让系统自动访问一次网站,让IIS自己来做这个人品不好的人。
二、打开IIS,选中根节点,在右边的功能中找到【配置编辑器】,如图所示:
三、我们需要修改以下三个配置,如图所示:
四、在applicationPools中找到你需要热启动的应用程序池,点开集合列表,选中应用程序池,将startModel改为AlwaysRuning。如图:
五、在serviceAutoStartProviders节中,打开集合,点击添加,写上名字和类名,这个名字要记住,因为下一步需要填写这个名字.如图:
六、在sites节点中打开集合,选中我们需要设定的站点,在下面的属性框中打开applicationDefaults节点,将serviceAutoStartEnabled设为true,将上一步增加的serviceAutoStartProvider的Name填写到这里.
到此站点的热启动已经配置完毕.
配置好后可能会遇到的一些问题以及注册事项:
1.在代码中最好将所有的都用try{}catch{}包住,因为如果这里抛出的异常会导致应用程序停止.
2.运行的状态我们可以从事件管理器中进行查看,或是自己在代码中写日志记录运行的状态.
3.这个类中所做的并不会引用站点的启动,不会执行应用程序的生命周期,也就是说不会调用Application_Start以及其它生命周期过程.所以在本例中我们再会NEW一个请求这个站点.
4.如果在这里请求站点时一定要用异步的方式Request.同步的Request会报超时.
在IIS7.5之前我们想让我们只能设置的ASP.NET应用程序应用程序池的回收时间,比如设一个超大的时间,但是这样做只是防止了应用程序池定时回收,却不能解决重启后,或是其它原因进程回收后每一个人访问的慢的“人品问题”,所以微软在IIS7.5 WINDOWS 2008带的IIS上增加一个叫做热启动的功能。
热启动的原理很简章,就是在IIS的配置文件中做一些设定并指定一个继承自IProcessHostPreloadClient的类,然后告诉IIS说,如果哪个应用程序池回收了再次激活启动的时候就执行一下这家伙,而这家伙的功能基本上就是初始化系统的数据啦,把数据缓存到内存里啦等等这些。如此这般之后,当系统干完活儿的时候,真正访问的用户打开站点的时候会惊奇的发现,第一次访问也不慢啦,再不也用做人品不好的人了,从此腰也不酸了腿也不疼了一口气能上五楼了*^_^ *。这么好用的功能到底要怎么使用呢?
一、首先实现继承自IProcessHostPreloadClient的类:
[code] try
{
string url = "www.mysiteurl.com";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
req.BeginGetResponse(o =>{}, null);
}
catch{}
[/code]
这段代码做的一件事情就是在热启动时让系统自动访问一次网站,让IIS自己来做这个人品不好的人。
二、打开IIS,选中根节点,在右边的功能中找到【配置编辑器】,如图所示:
三、我们需要修改以下三个配置,如图所示:
四、在applicationPools中找到你需要热启动的应用程序池,点开集合列表,选中应用程序池,将startModel改为AlwaysRuning。如图:
五、在serviceAutoStartProviders节中,打开集合,点击添加,写上名字和类名,这个名字要记住,因为下一步需要填写这个名字.如图:
六、在sites节点中打开集合,选中我们需要设定的站点,在下面的属性框中打开applicationDefaults节点,将serviceAutoStartEnabled设为true,将上一步增加的serviceAutoStartProvider的Name填写到这里.
到此站点的热启动已经配置完毕.
配置好后可能会遇到的一些问题以及注册事项:
1.在代码中最好将所有的都用try{}catch{}包住,因为如果这里抛出的异常会导致应用程序停止.
2.运行的状态我们可以从事件管理器中进行查看,或是自己在代码中写日志记录运行的状态.
3.这个类中所做的并不会引用站点的启动,不会执行应用程序的生命周期,也就是说不会调用Application_Start以及其它生命周期过程.所以在本例中我们再会NEW一个请求这个站点.
4.如果在这里请求站点时一定要用异步的方式Request.同步的Request会报超时.
相关文章推荐
- 关于asp.net程序第一次运行速度慢的问题解决办法
- Asp.Net MVC Html.TextBoxFor日期格式化出错“模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式” 解决办法
- 解决ASP.NET MVC AllowAnonymous属性无效导致无法匿名访问控制器的问题
- ASP.NET网站第一次访问慢的解决方法
- 改善ASP.NET MVC应用程序第一次启动性能问题
- ASP.NET MVC 第一次访问每一个控制器特别慢.
- 关于asp.net程序第一次运行速度慢的问题解决办法
- 解决asp.net mvc中*.resx资源文件访问报错
- ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法
- asp.net MVC + linq to entity报"不允许启动新事务,因为有其他线程正在该会话中运行."错误解决方法
- Asp.net MVC 3 Razor 视图引擎 中使用@输出的内容都会被自动进行HTML编码 问题的解决办法
- ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法
- ASP.NET 预编译命令(解决发布后第一次访问慢问题)
- ASP.NET 预编译命令(解决发布后第一次访问慢问题)
- 图解IIS8上解决ASP.Net第一次访问慢的处理
- 解决Asp.net Web网站第一次访问慢的问题
- 解决asp.net mvc中*.resx资源文件访问报错
- 解决asp.net MVC 的数据访问并发问题。(已有打开的与此 Command 相关联的 Dat)
- Asp.Net MVC Html.TextBoxFor日期格式化出错“模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式” 解决办法
- 解决Asp.net Web网站第一次访问慢的问题