gpt4 book ai didi

c# - 如果我使用 MemoryStream 存储 0.5 GB 的数据 block 然后丢弃它,它会产生什么长期影响?

转载 作者:太空狗 更新时间:2023-10-29 21:58:48 24 4
gpt4 key购买 nike

在我的 Azure 角色中,我在 64 位进程中运行 C# 代码,我想下载一个 ZIP 文件并尽快解压缩。我认为我可以执行以下操作:创建一个 MemoryStream 实例,下载到该 MemoryStream,然后将流传递给某个 ZIP 处理库以进行解包,一旦解包完成就丢弃溪流。这样我就可以摆脱不必要地执行大量 I/O 的写入-读取-写入序列。

不过我读过MemoryStream is backed by an array和半千兆字节的数组肯定会被认为是一个“大对象”,将被分配in a large object heap that doesn't compact on garbage collection .这让我担心 MemoryStream 的这种使用可能会导致进程内存碎片化和负面的长期影响。

这可能会对我的过程产生任何长期的负面影响吗?

最佳答案

答案在您链接到的问题的已接受答案中。感谢提供引用。

The real problem is assuming that a program should be allowed to consume all virtual memory at any time. A problem that otherwise disappears completely by just running the code on a 64-bit operating system.

我会说,如果这是一个 64 位进程,您无需担心。

创建的漏洞只会导致 LOH 的虚拟地址空间碎片化。这里的碎片对你来说不是大问题。在 64 位进程中,由于碎片而浪费的任何整个页面都将变为未使用状态,它们映射到的物理内存再次可用以映射新页面。很少部分页面会被浪费,因为这些是大分配。引用的局部性(碎片整理的另一个优势)大部分被保留,同样是因为这些是大分配。

关于c# - 如果我使用 MemoryStream 存储 0.5 GB 的数据 block 然后丢弃它,它会产生什么长期影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882206/

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