ASP.NET定时执行时使用Cache防止ASP.NET进程自动回收

在ASP.NET中不管是使用后台进程还是使用Timer的方式都避免不了一个问题,就是ASP.NET会过一段时间后就回收了进程,而不管你后台有没有工作。只有当你再次请求该站点时它才会再次被执行。

我们可以测试一下,Global的APPLICATION_START事件中启动一个Timer第隔5秒钟向文件里写入一个时间,然后你启运这个首页,然后关掉,就会发现过一会儿它就不再向文件里写入内容了。(这个测试的代码上网有很多,这里就不提供代码了)。

为了解决这个问题,我们可以在Global中使用不断刷新Cache的来模拟一个请求,当Cache失效时系统自动请求一个指定的唤醒页面,这样子就模拟了一次请求,使你的应用程序永远处在运行的状态中。

    public class Global : System.Web.HttpApplication
    {        
        const string DummyCacheItemKey = "DummyCacheItem";
        const string DummyPageUrl = "/RaiseUp.aspx";

        protected void Application_Start(object sender, EventArgs e)
        {
            AlwaysRun();
        }

        /// <summary>
        /// 使用Cache过期技术使应用程序永远在线
        /// </summary>
        private void AlwaysRun()
        {
            if(null != HttpContext.Current.Cache[DummyCacheItemKey]) return;

            HttpContext.Current.Cache.Add(DummyCacheItemKey, String.Empty, null,
                DateTime.MaxValue, TimeSpan.FromMinutes(1), System.Web.Caching.CacheItemPriority.Normal,
                new System.Web.Caching.CacheItemRemovedCallback((x, y, z) => new System.Net.WebClient().DownloadData("HTTP://" + Request.Url.Authority + DummyPageUrl)));
        }

        protected void Application_BeginRequest(Object sender, EventArgs e)
        {
            if (HttpContext.Current.Request.Url.AbsolutePath == DummyPageUrl)
                AlwaysRun();
        }
    }

  

转载于:https://www.cnblogs.com/biyusoft/archive/2011/09/17/3432049.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值