gpt4 book ai didi

c# - 大型 System.IO.MemoryStream 是否会导致我的应用程序的内存使用量急剧增加?

转载 作者:行者123 更新时间:2023-11-30 13:34:56 24 4
gpt4 key购买 nike

我正在构建一个允许用户从 URL 下载文件的库。我正在考虑的选项之一是让用户指定文件的预期 MD5 校验和;该库的 GetFile(string url) 函数确保下载流的校验和与用户指定的匹配。

意识到 HttpWebResponse.GetResponseStream() 返回的 NetworkStream 是不可搜索的,我找到了一种复制 Stream 的方法,这要归功于这个问题的答案:How can I read an Http response stream twice in C#? .在继续之前,我想弄清楚这种复制对内存的影响是什么;不幸的是,在谷歌和 MSDN 上多次搜索都没有结果。

库对要下载的文件的大小没有限制。我的问题是,如果用户选择一个 2GB 的文件,.NET 2.0 中的 MemoryStream 实现是否足够智能以足够有效地使用页面文件和 RAM,从而使系统不会由于 VM 紧缩而开始爬行?此外,Jon Skeet 对另一个问题的评论给了我一些思考——他断言即使在处理 MemoryStream 之后,内存也不是 100% 释放的。如何以及何时可以确保内存实际被释放?它会根据系统的要求(和必要性)发布吗?

谢谢,马诺杰

最佳答案

您正在将其保存到文件中,对吗?为什么不逐 block 保存它,边走边更新散列,然后在最后检查散列?我认为您不需要两次阅读响应,也不需要对其进行缓冲。正如另一个答案所指出的那样,无论如何,当您超过 1GB 时,这将失败。

不要忘记 MemoryStream 的当前大小,任何时候它必须增长,您最终都会(暂时)得到新数组 plus 同时内存中的旧数组。当然,如果您事先知道内容长度,那将不是问题,但将其写入磁盘并随手散列会更好。

关于c# - 大型 System.IO.MemoryStream 是否会导致我的应用程序的内存使用量急剧增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com