Thread.Start(WebRequest.GetResponse)与WebRequest.BeginGetResponse

时间:2010-11-28 21:10:27

标签: c# performance comparison webrequest

我想在UI上显示下载文件,下载正在进行中。使用WebRequest我有两个选择:

  1. 使用WebRequest.BeginGetResponse及相关方法。

    优点:可以以字节显示确切的进度。

    缺点:要编写更多代码。由于同步和异步方法不混合,我需要使用BeginGetResponseBeginReadBeginGetRequestStream。手动实现的更多内容,包括读缓冲区,超时。

  2. 启动新线程(或使用线程池),使用WebRequest.GetResponse及相关方法。

    优点:没有不必要的代码。

    缺点:无法显示确切的进展。

  3. 由于要下载的文件相当小,以字节为单位显示进度是有利的,但并不重要。如果我使用第二种方法,功能方面和性能方面,我会想念一些东西吗?

    或许我错过了一个更高级别广泛使用的包装纸? (WebClient不会公开WebRequest的属性,因此它对我无法使用,因为我需要使用Cookie等。)

1 个答案:

答案 0 :(得分:4)

如果您创建一个新线程(选项号2),该线程将在执行请求时阻塞。如果你一次只发出一个请求并不重要,但是如果你做了很多请求,你可能会得到很多额外的线程。每个线程将花费你~1MB RAM。

WebRequest.BeginGetResponse之类的异步调用在请求进行过程中不会阻塞任何线程,只有在请求完成后才会从线程池中选择一个线程来传递结果。