Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System.Net.WebClient.DownloadFile()是否正在读取分块下载的文件?_.net - Fatal编程技术网

System.Net.WebClient.DownloadFile()是否正在读取分块下载的文件?

System.Net.WebClient.DownloadFile()是否正在读取分块下载的文件?,.net,.net,System.Net.WebClient.DownloadFile()是将下载的文件分块读取,还是将整个文件读取到内存中,最终将其转储到磁盘? 有人知道吗?从我的测试来看,文件似乎是用0字节立即创建的,然后在下载完成后爆炸成完整大小。但不知何故,这很难让人相信,因为这意味着下载2GB文件时会占用2GB的RAM…这毫无意义。Web响应直接流式传输到文件中;它不会将整个事件缓冲到内存中。该方法将阻塞线程,直到下载整个文件。您可以使用异步下载它。它将接收到的任何内容直接写入文件流,如果要查看Refle

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

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

它将接收到的任何内容直接写入文件流,如果要查看Reflector或参考源,请调用WriteStream.Write()。直到文件关闭后,size属性才会在资源管理器中更新。

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

IE在下载文件时不是也会这样做吗?我没有一个链接来支持这种推测,但我想象它正在写入一个由框架控制的临时位置(某个地方的用户数据),然后在下载完成时移动到目标文件(其中有一个0字节的占位符)。再一次,只是猜测。(因此,不是答案。)如果你用反射器看它(),我相信你。我现在只希望MONO也有同样的表现。谢谢是的,从文件中我知道了。但它没有说明在写入磁盘之前是否使用内存来缓冲整个下载。