System.Net.WebClient.DownloadFile()是以块读取下载的文件,还是将整个文件读取到内存中,最后将其转储到磁盘上? 有人知道吗?从我的测试看来,文件是用0字节立刻创建的,然后一旦下载完成就爆炸为全尺寸。但不知何故,这很难相信,因为这意味着下载2GB文件时会占用2GB的内存......这是毫无意义的。System.Net.WebClient.DownloadFile()以块的形式读取下载的文件?
回答
它将任何直接收到的内容写入FileStream。 DownloadBitsState.RetrieveBytes() method,WriteStream.Write()调用如果你想用反射器或参考源看看。在文件关闭之前,size属性不会在资源管理器中更新。
如果你使用Reflector()查看它,我相信你。我现在只希望MONO的行为一样。谢谢! – Krumelur 2011-04-17 00:20:29
Web响应直接传输到文件中;它不会将整个事物缓冲到记忆中。该方法阻塞线程直到整个文件被下载。您可以使用DownloadFileAsync()
异步下载它。
是的,从阅读文件,这就是我所知道的。但它并没有说它在写入磁盘之前是否使用内存来缓冲整个下载。 – Krumelur 2011-04-17 00:23:00
通过查看反汇编代码(assembly System,Version = 4.0.0.0),我发现了以下内容:方法DownloadFile()使用参数asyncOp = null调用方法DownloadBits()以下载文件。下载完成后,该方法以byte []形式返回整个下载的文件。因此,内存被浪费了,并且可能遇到大文件的问题。
- 1. 以块形式下载文件
- 2. 以大块格式读取CSV文件
- 3. 使用gzip编码(Python 3.4)以块的形式下载大文件
- 4. 使用gjs,如何使异步http请求以块的形式下载文件?
- 5. 直接下载文件vs读取文件作为下载
- 6. Laravel 5 - 读取以对象数组形式出现的文件
- 7. 以数组的形式读取二进制.dat文件
- 8. 以fread的矩阵形式读取文件
- 9. 如何以整数形式读取文件中的每7位?
- 10. 如何以Zip-File的形式下载文件夹?
- 11. 使用WCF以块的形式下载Azure blob
- 12. C# - 读取文件下载的本地下载路径
- 13. 使用AJAX + Javascript以块读取文件
- 14. 模块可以下载文件吗?
- 15. 从'System.Net.WebClient.DownloadFile''解锁'ps1文件的快速和肮脏的方式
- 16. 通过邮政形式下载文件
- 17. PHP下载文件,读取问题
- 18. 如何以Python中的字符串形式读取文本文件的名称?
- 19. 使用PHP下载文件的旧版本读取文件
- 20. 在C++中以二进制形式读取任何文件?
- 21. 以可绘制形式读取图像文件
- 22. 以c#windows窗体形式异步下载文件的最佳方式vs 2005
- 23. 在内核模式下读取文件
- 24. 如何读取以二进制形式传输的文本文件
- 25. PHP块文件读取
- 26. 文件形式的.py不读成C
- 27. 读取shape文件的几何图形
- 28. 以特定格式读取文件
- 29. 以编程方式读取.resx文件
- 30. PHP:以excel格式下载文件
下载文件时,IE不会做同样的事吗?我没有支持这种推测的链接,但我想它是写入由框架(用户数据某处)控制的临时位置,然后在下载完成时移动到目标文件(其中有0字节的占位符) 。再一次,只是猜测。 (因此,不是一个答案。) – David 2011-04-17 00:09:56