当我试图在物理内存中保存超大托管堆的非常大的对象时会发生什么? 例如,电影的大小为4.5 GB,虚拟内存(RAM)的大小仅为2 GB。垃圾收集器在这种情况下将如何工作? (物理空间足够)C#中的超大对象和托管堆
2
A
回答
0
它清楚,你会耗尽内存,在这种情况下,你会得到MemoryOutOfException和GC不能做关于
0
什么时候我心底尝试保存会发生什么在物理内存中非常大的对象,比托管堆大?
我不知道,因为我上次检查的CLR是否已演变,但据我所知,即使V4的CLR的64位版本不支持任何单一的对象是大于2GB ,即使你有更多的物理内存。
0
在.NET 4.5 CLR中,您可以通过配置更改打开对> 2GB大小的对象的支持。数组索引被限制为int.MaxValue
,不过您只能使用比byte
更大的元素类型(在存储字节时不是您想要的)创建大对象。
因此,在当前版本(4.5)甚至不可能分配这样一个数组。如果是,它会存储在LOH中。
无论如何,如果您需要存储如此大的文件,并且不想使用流式处理方式,这通常会更可取,我推荐您使用Marshal.AllocHGlobal
或VirtualAlloc
。它们本质上是不安全的,但它们不会有任何限制。
相关问题
- 1. 什么是C++/CLI中的托管对象和非托管对象?
- 2. Managed C++中托管对象的分配
- 3. 销毁C中的非托管对象#
- 4. 如何在.Net中列出堆中的所有托管对象?
- 5. 堆vs托管堆
- 6. 带有托管对象的C++向量
- 7. 传递非托管的指针非托管对象在托管类C++/CLI
- 8. C#非托管对象的大小是多少?
- 9. 大对象堆
- 10. 堆生成2和大对象堆爬
- 11. 托管C++和C#
- 12. HashMap:处理托管对象C++
- 13. 非托管对象的GC.AddMemoryPressure
- 14. 堆栈中的对象vs C++堆中的对象
- 15. Monotouch:垃圾回收器,托管和非托管对象
- 16. C++托管数组大小
- 17. C++托管和非托管静态库
- 18. 管理堆大小及其中的所有对象的帐户
- 19. 在C#中创建非托管C++对象#
- 20. CDI与非托管对象
- 21. 在非托管堆上分配ref类对象
- 22. iOS:我可以在托管中存储托管对象吗?
- 23. 在非托管中使用托管类对象
- 24. 如何在非托管对象中获得托管bean?
- 25. 在C++中托管和非托管类型之间的转换?
- 26. 了解大对象堆和DumpHeap
- 27. .NET大对象堆和JSON交互
- 28. RegEx,StringBuilder和大对象堆碎片
- 29. 如何高效地管理数组(C++)中的堆对象?
- 30. 托管环境中使用的最大堆? (.net/java)
虚拟内存与RAM完全相反。在一台32位的机器上,没有办法在2磅的捅中塞满4.5磅重的猪。 – 2012-07-29 19:26:25