2012-04-01 88 views
0

Hola检查此代码。为什么即使HTTPWebRequest长时间发送,HTTPWebRespnse也需要更长的时间?

 var watch = new Stopwatch(); 
    watch.Start(); 
    var request = HttpWebRequest.Create(new Uri("http://localhost:59449/stwebapi/chat?userId=john")) as HttpWebRequest; 
    Console.WriteLine(watch.Elapsed); 

    Thread.Sleep(5000); 

    watch.Restart(); 
    var response = request.GetResponse(); 
    Console.WriteLine(watch.Elapsed); 

我发送了web请求,等了很长时间,然后得到了回应。仍然需要更长的时间来执行。我得到的结果是

00:00:00.1142339 
00:00:03.1365544 

为什么反应花了我3秒? 与异步响应相同的响应滞后。

我想让GetResponse函数立即执行。我怎样才能做到这一点?

谢谢。

+0

这真的与两个c#版本有关吗?如果不是,请删除这些标签! – ThiefMaster 2012-04-01 17:36:08

回答

4

我强烈怀疑,直到你打电话给GetResponse,请求甚至没有发送...所以你的Thread.Sleep基本上你没有任何好处。

为什么不立即拨打GetResponse?如果它需要3秒,那么大概这是网络服务器花了多长时间来回答您的请求...

(顺便说一句,您应该使用using声明来确保您处置WebResponse;否则,当连接池等待一个连接变为可用时,结束请求超时。)

+0

谢谢乔恩。我向该服务器发送了10个请求,并且需要将近25秒才能执行此线程。但由于要求不会开始,直到我说getResponse我没有什么可以做的。非常感谢...... – om471987 2012-04-01 17:46:17

+1

@Omkarpanhalkar:如果你几乎在同一时间发送它们,你可能会被连接池扼杀 - 它可能一次只发送4个。你可能想考虑增加池大小。 – 2012-04-01 17:47:21

相关问题