Speeding up your ASP.NET application


First request to your ASP.NET application seems to take much longer than others?That’s because to maximize resources IIS doesn’t keep all sites on an instance running at all times.A website on IIS is not loaded until its needed and, by default, will eventually be unloaded after a period of inactivity.In this article we’ll see how we can enable Auto-Start feature either through IIS Manager or configuration files and even how we can perform more advanced application warm-up routines, such as priming a cache.

Configuring Auto-Start with IIS
1、Open Internet Information Services (IIS) Manager.

2、In the Connections pane, select theApplication Pools node, revealing the Application Pools pane in the main view.

3、Select the application pool for which you wish to enable Auto-Start.

4、Click Advanced Settings…

5、Locate the Start Mode option under the General group and set it toAlwaysRunning.



That’s it!  Now the website hosted by the application pool you just modified will always be instantly available, even after extended periods of activity.

 Configuration Auto-Start with applicationHost.config

ApplicationHost.config can be found at <Windows>\System32\inetsrv\config\applicationHost.config.Inside of the applicationHost.config file, locate the<applicationPools> node located under<configuration>/<system.applicationHost>. Inside of the<applicationPools> node, locate the entry whose name attribute corresponds to your application pool, and add astartMode attribute with the value of “AlwaysRunning”.

<applicationPools>
        <add name="MvcMusicStore" startMode="AlwaysRunning" />
    ...
</applicationPools>

Advanced Application Warm Up with Auto-Start

In the past it wasn’t unheard of for developers to prime their caches with these expensive data requests in theApplication_Start() function of Global.asax.cs, IIS now provides a cleaner way through the use of Auto-Start Providers.

For example, let’s imagine that the home page of your application contains a rather expensive call.  In the fact, the call is so expensive that we’ve elected to cache the results improve the performance of subsequent requests.  However, this still lays the bulk of the work at the feet of the site’s first visitor.

public ActionResult Index()
        {
           var albums = HttpRuntime.Cache["TopSellingAlbums"];
           if (albums == null)
           {
                var service = new TopSellingAlbumsService();
                albums = service.GetTopFiveSellingAlbums();
                HttpRuntime.Cache["TopSellingAlbums"] = albums;
            }
            return View(albums);
         }

While this technique does improve the performance for subsequent visitors, it still lays the bulk of the work at the feet of the site’s first.  However, IIS now provides a better place to perform these types of warm-up tasks.

Preload clients, which implement the IProcessHostPreloadClient interface, contain a single method Preload(…) which can be used to cleanly perform these warm-up tasks.

public class MvcMusicStoreApplicationPreloadClient : IProcessHostPreloadClient
    {
        public void Preload(string[] parameters)
        {
            var service = new TopSellingAlbumsService();
            HttpRuntime.Cache["TopSellingAlbums"] = service.GetTopFiveSellingAlbums();
        }
   }

However, this class will not be loaded automatically.  We need to tell IIS both about the existence of this class as well as which website it applies to.  To do this, we’ll need to return to our applicationHost.config file.

First, we’ll need to add an element called <serviceAutoStartProviders> to the<configuration>/<system.applicationHost> node.

<serviceAutoStartProviders>
            <add name="MvcMusicStoreAutoStartProvider" type="MvcMusicStore.MvcMusicStoreApplicationPreloadClient, MvcMusicStore" />
        </serviceAutoStartProviders>

This element registers our custom preload client with the name MvcMusicStoreAutoStartProvider.  Be sure to fully qualify the type name in the type attribute so the assembly loader can locate it.

Finally, we’ll locate the entry for our site under the sites node and register our preload client in our site’s application node.

<site name="MvcMusicStore" id="1" serverAutoStart="true">
                <application path="/" applicationPool="MvcMusicStore" serviceAutoStartEnabled="true" serviceAutoStartProvider="MvcMusicStoreAutoStartProvider">
                </application>
       . . .
            </site>


This is done by adding the serviceAutoStartEnabled attribute, set to true, and by adding theserviceAutoStartProvider attribute, set to the name of theserviceAutoStartProvider entry we added in the previous step.

 

 

<img οnclick="javascript:alert('11')''/>


 <img οnclick="javascript:alert('11')''/>

 <img οnclick="javascript:alert('11')"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值