【发布时间】:2010-03-24 05:09:07
【问题描述】:
在我的一个应用程序中,我使用 WebClient 类从 Web 服务器下载文件。根据 Web 服务器,有时应用程序会下载数百万个文档。似乎当有很多文档时,WebClient 的性能无法很好地扩展。
即使在成功下载特定文档后,WebClient 似乎也不会立即关闭它为 WebServer 打开的连接。
我想知道我还有什么其他选择。
更新: 我还注意到,对于每次下载,WebClient 都会执行身份验证握手。因为我的应用程序只与单个 Web 服务器通信,所以我期待看到这种握手一次。 WebClient 的后续调用不应该重用身份验证会话吗?
更新:我的应用程序还调用了一些 Web 服务方法,并且对于这些 Web 服务调用,似乎重用了身份验证会话。此外,我正在使用 WCF 与 Web 服务进行通信。
【问题讨论】:
-
您使用的是异步 Web 客户端调用还是同步调用?
-
我正在使用同步调用,但是多个线程同时调用不同的 WebClient 调用。
-
我建议只使用一个 Web 客户端和异步调用进行测试,以避免冗余的身份验证阶段。我认为 webclient 不会立即关闭连接是有目的的,因此您可以排队另一个请求。我会将 WebClient 抽象视为 Web 浏览器,在一个启动的 Web 浏览器中,您可以发起多个请求而无需重新验证。但是,如果您每次想要下载文件时关闭浏览器并重新打开另一个浏览器(即使您共享 cookie),它可能会变慢。