use*_*771 3 c# memorystream httpwebresponse
我正在构建一个允许用户从URL下载文件的库.我正在考虑的一个选项是让用户为文件指定预期的MD5校验和; 库的GetFile(string url)函数确保下载的流的校验和与用户指定的校验和匹配.
知道HttpWebResponse.GetResponseStream()返回的NetworkStream是不可寻的,我找到了一种复制流的方法,这要归功于这个问题的答案:如何在C#中读取两次Http响应流?.在我走得更远之前,我想弄清楚这种重复的记忆含义是什么; 不幸的是,Google和MSDN上的多次搜索都化为乌有.
该库对要下载的文件的大小没有限制.我的问题是,如果用户选择2GB文件,.NET 2.0中的MemoryStream实现是否足够智能,足以有效地使用PageFile和RAM,系统不会因VM崩溃而开始爬行?此外,Jon Skeet对另一个问题的评论给了我一些思考 - 他断言即使在处理了MemoryStream后,内存也不是100%免费的.我如何以及何时确保实际释放内存?它会根据系统的要求(和必要性)发布吗?
谢谢,Manoj
你将它保存到文件中,对吧?为什么不按块保存块,随时更新哈希,然后只检查最后的哈希值?我认为您不需要两次读取响应,也不需要缓冲它.正如另一个答案指出的那样,无论如何当你超过1GB时,这将失败.
不要忘记它以及当前的大小MemoryStream,任何时候它必须增长你最终会(暂时)新的数组加上内存中的旧数组同时.当然,如果您事先知道内容长度,这不会是一个问题,但是将它写入磁盘和散列仍然会更好.
| 归档时间: |
|
| 查看次数: |
3699 次 |
| 最近记录: |