.NET网站自动浏览器分享,解决IIS6应用池回收后第一次访问慢问题

.NET开发的网站,如果不是使用预编译发布,网站会在iis6应用池回收后第一次访问很慢,为了解决这个问题,今天写了一个自动浏览的工具,现在分享给大家,界面如下。

关键部分源码

        //手动点击浏览
        private void btnBrowsing_Click(object sender, EventArgs e)
        {
            if (btnBrowsing.Enabled == true && chkEnableAutomaticBrowsing.Checked == true)
            {
                btnBrowsing.Enabled = false;
                Thread thread = new Thread(new ThreadStart(AutoBrowsing));
                thread.IsBackground = true;
                thread.Start();
            }
            else
            {
                MessageBox.Show("任务正在执行!");
            }
        }

        DateTime tempTime = DateTime.MinValue;//防止一分钟内刷新多次

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now;

            //转钟时清除一天日志
            if (dt.ToLongTimeString() == "0:00:00")
            {
                rtxtLogs.Text = string.Empty;
            }

            TimeSpan ts = dt - tempTime;
            //1分钟内不得刷新两次
            if (ts.TotalMinutes > 0)
            {
                //到点自动刷新
                if (lstTime.Items.Contains(dt.ToShortTimeString()))
                {
                    tempTime = dt.AddMinutes(1);
                    btnBrowsing_Click(null, null);
                }
            }
        }

        private void AutoBrowsing()
        {
            int itemTotalCount = 0;
            CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
            {
                itemTotalCount = lvWebsitInfo.Items.Count;
            }));
            for (int i = 0; i < itemTotalCount; i++)
            {
                string url = string.Empty;
                CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
                {
                    url = lvWebsitInfo.Items[i].SubItems[2].Text;
                }));
                int retry = 0;
            retryFlag:
                CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                {
                    webBrowser1.Navigate(url);
                }));
                if (WaitWebPageLoad())
                {
                    CrossThreadCalls.SafeInvoke(this.rtxtLogs, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        rtxtLogs.AppendText(url + "浏览成功,浏览时间:" + DateTime.Now.ToLongTimeString() + "\r\n\r\n");
                        rtxtLogs.ScrollToCaret();
                    }));
                    CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        lvWebsitInfo.Items[i].SubItems[3].Text = DateTime.Now.ToString();
                    }));
                }
                else
                {
                    CrossThreadCalls.SafeInvoke(this.rtxtLogs, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        rtxtLogs.AppendText(url + "浏览失败,即将重试" + (retry + 1) + "次\r\n");
                        rtxtLogs.ScrollToCaret();
                    }));
                    if (retry < 2)//重试3次
                    {
                        retry++;
                        Thread.Sleep(3000);
                        goto retryFlag;
                    }
                    CrossThreadCalls.SafeInvoke(this.rtxtLogs, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        rtxtLogs.AppendText(url + "浏览失败\r\n\r\n");
                        rtxtLogs.ScrollToCaret();
                    }));
                    CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        lvWebsitInfo.Items[i].SubItems[3].Text = "自动浏览失败";
                    }));
                }
            }
            CrossThreadCalls.SafeInvoke(this.btnBrowsing, new CrossThreadCalls.TaskDelegate(delegate()
            {
                btnBrowsing.Enabled = true;
            }));
            CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
            {
                webBrowser1.Navigate("about:blank");
            }));
        }

        /// <summary>
        /// 判断webbrowser是否加载一个网页完毕,可判断包括iframe的网页
        /// </summary>
        /// <returns></returns>
        private bool WaitWebPageLoad()
        {
            int i = 0;
            string sUrl = string.Empty;
            while (true)
            {
                Delay(50);  //系统延迟50毫秒,够少了吧!
                WebBrowserReadyState webBrowserState = WebBrowserReadyState.Uninitialized;
                CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                {
                    webBrowserState = webBrowser1.ReadyState;
                }));
                if (webBrowserState == WebBrowserReadyState.Complete) //先判断是否发生完成事件。
                {
                    bool isBusy = true;
                    CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        isBusy = webBrowser1.IsBusy;
                    }));
                    if (!isBusy) //再判断是浏览器是否繁忙
                    {
                        i = i + 1;
                        if (i == 2)
                        {
                            CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                            {
                                sUrl = webBrowser1.Url.ToString();
                            }));
                            if (sUrl.Contains("res") || sUrl.Contains("daohang.114so.cn")) //这是判断没有网络的情况下
                            {
                                return false;
                            }
                            else
                            {
                                return true;
                            }
                        }
                        continue;
                    }
                    i = 0;
                }
            }
        }

        private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务;
        {
            DateTime current = DateTime.Now;
            while (current.AddMilliseconds(Millisecond) > DateTime.Now)
            {
                Application.DoEvents();//转让控制权
            }
            return;
        }

点击下载C#源码

.NET网站自动浏览器分享,解决IIS6应用池回收后第一次访问慢问题

时间: 2024-10-27 02:06:52

.NET网站自动浏览器分享,解决IIS6应用池回收后第一次访问慢问题的相关文章

ASP.NET 预编译命令(解决发布后第一次访问慢问题)

ASP.NET 编译工具 (Aspnet_compiler.exe) 官方说明 新建bat文件 @echo off   CD /d C:\Windows\Microsoft.NET\Framework\v2.0.50727   aspnet_compiler -p E:\wwwroot\站点主目录 -v /   echo 命令执行成功!   pause 请注意,上面的v2.0.50727代表项目的.NET版本,可根据项目版本替换成以下版本 v2.0.50727 v3.0 v3.5 v4.0.30

解决Openstack配置spice模式后console访问不了问题

最近由于工作需要需要安装openstck调试spice协议,所以折腾了一下,发现按照网络上的教程走完之后,控制台访问spice web界面总是启动不了,在本机通过curl到是能访问,看了很多教程都是说开启防火墙端口6082,但是好像并没有用,经过多方尝试发现:1.首先我们在安openstack的时候firewall是关闭的,2.配置好spice后,通过防火墙配配置开放端口6082`firewall-cmd --state # 查看防火墙状态,如果是not running 就开启systemctl

X5内核浏览器video自动全屏解决办法-canvas

最近在做手机端上面播放视频的项目,但是在安卓上面,video的播放是脱离页面,置于最顶层的,所以带来了很多问题,为了解决这个问题,查看了多方资料,写了下面简单的demo,方便以后使用. 下面就是运用canvas重绘video视频. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport&quo

C#_自动化测试1_模拟post,get_12306火车票网站自动登录工具

还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗. 今天我们就开发一个12306网站自动登录软件. 帮助您轻松订票 通过前两篇博客Fiddler教程和HTTP协议详解,我们了解了Web的原理. Web的原理就是,浏览器发送一个Request给Web服务器,Web服务器处理完这个请求之后发送一个HTTP Response给浏览器. 如果我们用自己写的程序来发送Request给Web服务器,然后再捕获Web服务器发回来的Response. 检查它与期望值值是否一致. 这不就是Web自

网站pc端分享QQ好友,空间,微博

在开发pc端网站的过程中,涉及到邀请好友的功能,之前单纯的复制粘贴已经无法满足用户的体验.故,仿照移动端添加自动分享到QQ好友,QQ空间,QQ微博的功能. 分享到QQ好友:http://connect.qq.com/widget/shareqq/index.html?url=分享后跳转链接&title=网站的名称 分享到QQ空间:http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=分享后跳转链接 分享到腾讯微博:http:

手机访问PC网站自动跳转到手机网站代码(转)

4G时代,手机网站已经非常普遍了,一般手机网站都有一个二级域名来访问,比如 m.16css.com 如果手机直接访问www.16css.com 就是PC网站,在手机上浏览电脑版网站体验非常不好. 如果能够手机访问PC端电脑网站自动跳转到手机网站就好了: 代码如下: 将以下代码放在首页区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 3

网站导致浏览器崩溃的原因总结(多款浏览器)

面试某公司的时候,面试官问到,导致浏览器崩溃的原因有哪些?愚辈不才,仅回答出了内存泄漏.其实在网页在装载的过程中,常常由于种种原因使浏览器的反映变的很慢,或造成浏览器失去响应,甚至会导致机器无法进行其他的操作. 对于访客,如果登录您网站,浏览器就立刻崩溃,我想这对谁都是无法容忍的,对此总结了网站导致浏览器崩溃的原因: 1. 内存泄漏 还是先谈下内存泄漏,网站由于内存泄漏的而照成崩溃有两种情况,服务器的崩溃和浏览器的崩溃.内存泄漏所造成的问题是显而易见的,它使得已分配的内存的引用就会丢失,只要系统

host缓存,浏览器缓存---解决host缓存带来的伤

1.缓存 缓存,对应工程师来讲简直太熟悉了,太方便了,省略到资源或数据的获取方式,直接缓存到离用户访问最快的地方,也降低服务器的压力,比如: (1)静态文件获取 服务器->cdn->本地磁盘->本地内存 (2)数据获取 数据库->内存型数据库 (3)host 缓存 主域名服务器->顶级域名服务器->根域名服务器->网络服务提供商缓存->路由器缓存->系统缓存->浏览器缓存 缓存的好处不言而喻,提升用户的访问速度,降低服务端的压力,问题就是:多份数

解决IIS6.0无法下载Office 2007文件格式(ex:docx)的问题

最近在写有关文件上下载的程序.... 发现将Office 2007文件格式(例如docx档)的文件上传到server端是ok的... 但从client端要下载回来,却发生了错误的现象.... 最后到网络找了一下数据.才知道在IIS6.0要下载office 2007格式的文件 要先到IIS管理员→网站→右键[内容]→HTTP标头→MIME类型→新增→ 副文件名:.docx MIME类型:application/vnd.openxmlformats-officedocument.wordproces