sha*_*oth 6 .net c# memory-management large-object-heap
在我的Azure角色中运行64位进程内的C#代码我想下载一个ZIP文件并尽快解压缩.我想我可以执行以下操作:创建一个MemoryStream实例,下载到该实例,MemoryStream然后将流传递到某个ZIP处理库以进行解包,一旦解压缩完成,就丢弃该流.这样我就可以摆脱不必要地执行大量I/O的写 - 读 - 写序列.
但是我读过这个MemoryStream数组支持一个半千兆字节,这个数组肯定会被认为是一个"大对象",并且将被分配在一个大型对象堆中,这个堆不会在垃圾回收中压缩.这使我担心这种用法可能MemoryStream会导致过程记忆碎片化和负面的长期影响.
这可能会对我的流程产生长期的负面影响吗?
答案位于您链接的问题的已接受答案中。感谢您提供参考。
真正的问题是假设应该允许程序随时消耗所有虚拟内存。只要在 64 位操作系统上运行代码,这个问题就会完全消失。
我想说,如果这是 64 位进程,您就无需担心。
所创建的漏洞只会导致 LOH 的虚拟地址空间产生碎片。这里的碎片对你来说不是一个大问题。在 64 位进程中,由于碎片而浪费的任何整个页面都将变得未使用,并且它们映射到的物理内存再次可用于映射新页面。很少有部分页面会被浪费,因为这些分配量很大。引用的局部性(碎片整理的另一个优点)大部分被保留,同样是因为这些是大量的分配。
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |