System.Net.WebClient.DownloadFile()是否以块的形式读取下载的文件?

时间:2011-04-17 00:01:34

标签: .net

System.Net.WebClient.DownloadFile()是否以块的形式读取下载的文件,还是将整个文件读取到内存中,最后将其转储到磁盘? 有人知道吗?从我的测试看来,文件创建时立即使用0字节,然后在下载完成后爆炸到完整大小。但不知何故,这很难相信,因为这意味着在下载2GB文件时会占用2GB内存......这将毫无意义。

3 个答案:

答案 0 :(得分:2)

它将直接接收的内容写入FileStream。 DownloadBitsState.RetrieveBytes() method,WriteStream.Write()调用,如果你想看一下Reflector或Reference Source。在文件关闭之前,不会在资源管理器中更新size属性。

答案 1 :(得分:1)

通过查看反汇编代码(程序集系统,版本= 4.0.0.0),我发现了以下内容:方法DownloadFile()使用参数asyncOp = null调用方法DownloadBits()来下载文件。下载完成后,该方法将整个下载的文件作为byte []返回。因此,浪费了内存,并且可能会遇到大文件的问题。

答案 2 :(得分:0)

Web响应直接流入文件;它不会将整个事物缓冲到内存中。该方法阻塞线程,直到下载整个文件。您可以使用DownloadFileAsync()异步下载它。