我正在创建一个连接到网站并从中下载XML的程序。然后它将信息显示给用户。
我遇到的问题是,当我第一次打开程序并开始下载XML信息时,需要很长时间。当我在程序仍然打开的情况下从网站加载另一个页面时,下载大约需要半秒钟。我想知道是否有办法避免这种情况。
我目前使用HttpWebRequest下载流和StreamReader来读取它。然后我使用XLINQ来解析XML。
答案 0 :(得分:14)
尝试明确设置代理。如果您没有定义代理,HttpRequest
课程将花费时间搜索一个。一旦它(或没有)找到一个,它将在应用程序的生命周期中使用该信息,从而加快后续请求。
//internally sets "ProxySet" to true, so won't search for a proxy
request.Proxy = null;
您也可以在.config:
中定义<system.net>
<defaultProxy
enabled="false"
useDefaultCredentials="false" >
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>
答案 1 :(得分:1)
第一次延迟可能是由于以下因素的结合:
要确定哪个部分需要时间,请使用System.Diagnostics.Stopwatch()在代码中插入一些时间:
// this is the time to get the XML doc from the server, including the time to resolve DNS, get proxy etc.
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
timer.Stop();
Console.WriteLine("XML download took: " + timer.ElapsedMilliseconds);
timer.Start();
// now, do your XLinq stuff here...
timer.Stop();
Console.WriteLine("XLinq took: " + timer.ElapsedMilliseconds);
您可以在此周围插入一个循环,并查看第一个请求和后续请求之间各种组件的区别。
如果您发现差异在于下载,而不是查询,那么您可以使用Wireshark进行网络嗅探,进一步调查。
希望这有帮助。
答案 2 :(得分:0)
您可能需要做更多的研究,以确定第一次通过请求的哪个部分需要更长的时间。我的第一直觉是,获取您指定的域名的IP地址的DNS请求需要更长时间,因为它在第一次运行时没有缓存。它也可能是另一端的Web服务器,它必须在您第一次查询时运行一些启动脚本。你提到第一个请求需要很长时间,但是你没说多长时间。这是否会导致一个大问题,即第一次请求需要这么长时间,还是只是一个烦恼?