当前位置:  开发笔记 > 编程语言 > 正文

非常慢的WebResponse触发TimeOut

如何解决《非常慢的WebResponse触发TimeOut》经验,为你挑选了1个好方法。

我在C#中有一个函数,它通过从路由器页面检索64b XML来获取Internet的状态

public bool isOn()
        {
            HttpWebRequest hwebRequest = (HttpWebRequest)WebRequest.Create("http://" + this.routerIp + "/top_conn.xml");
            hwebRequest.Timeout = 500;
            HttpWebResponse hWebResponse = (HttpWebResponse)hwebRequest.GetResponse();
            XmlTextReader oXmlReader = new XmlTextReader(hWebResponse.GetResponseStream());       
            string value;
            while (oXmlReader.Read())
            {
                value = oXmlReader.Value;
                if (value.Trim() != ""){
                    return !value.Substring(value.IndexOf("=") + 1, 1).Equals("0");
                }
            }
            return false;

        }

使用Mozilla Firefox 3.5和FireBug插件我猜测它通常需要30ms来检索页面,但是在非常大的500ms限制下它仍然经常达到它.如何显着提高性能?

提前致谢



1> Jon Skeet..:

您没有关闭网络回复.如果您已向同一服务器发出请求而未关闭这些响应,那就是问题所在.

在一份using声明中坚持回应:

public bool IsOn()
{
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create
        ("http://" + this.routerIp + "/top_conn.xml");
    request.Timeout = 500;
    using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
    using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
    {      
        while (reader.Read())
        {
            string value = reader.Value;
            if (value.Trim() != "")
            {
                return value.Substring(value.IndexOf("=") + 1, 1) != "0";
            }
        }
    }
    return false;    
}

(我在同一时间做了一些其他改动......)

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有