首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebClient使用KeepAlive吗?

WebClient使用KeepAlive吗?
EN

Stack Overflow用户
提问于 2011-01-15 18:07:50
回答 2查看 25.4K关注 0票数 24

我需要向单个主机发出大约50个HTTP请求(API调用)。性能很重要,所以我想用HTTP KeepAlive的,WebClient支持这个吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-15 18:16:35

它在我的机器上有,但我看不到它被记录到了。我当然希望它是默认的。最简单的方法是运行Wireshark (或Fiddler),看看接下来会发生什么。

例如,此程序:

代码语言:javascript
复制
using System;
using System.Net;

class Test
{    
    static void Main()
    {
        WebClient client = new WebClient();
        for (int i = 0; i < 50; i++)
        {
            string text = client.DownloadString("http://www.microsoft.com");
            Console.WriteLine(text.Length);
        }
    }
}

生成第一个请求:

代码语言:javascript
复制
GET / HTTP/1.1   
Host: www.microsoft.com    
Connection: Keep-Alive

后续请求仅为:

代码语言:javascript
复制
GET / HTTP/1.1
Host: www.microsoft.com

..。大概是因为一旦连接进入KeepAlive模式,它就会一直保持这种模式。

票数 21
EN

Stack Overflow用户

发布于 2011-01-15 19:24:50

如本文所述,WebClient在其私有实现http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx中使用WebRequest。Microsoft不会将其公开为您可以控制的公共属性。

因此,使用Reflector查看它的实现,您可以看到如何为正在使用的WebRequest对象设置KeepAlive。就像@Jon指出的那样,实验表明KeepAlive设置为true。这也与其他场景相匹配,例如.NET远程处理的私有实现。

在极少数情况下,您可能会发现KeepAlive = true会导致SocketException,然后您必须使用反射或其他技巧将其设置为false,这非常恼人。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4699013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档