|
|
1
11
垃圾收集过程的一部分是压缩阶段。在这个阶段,分配的内存块被移动以减少碎片。当分配内存时,它并不总是在最后一块分配的内存关闭后分配。所以你可以挤进去一点,因为垃圾收集器通过更好地利用可用空间来腾出更多的空间。
我试着做一些测试,但我的机器不能处理。试一试,它会告诉你
至于你的评论,当
|
|
|
2
5
根据您使用的CLR,可能会涉及一些大型对象堆问题。 请看这篇文章,它解释了大块分配的问题(200000个项目的列表肯定是一个大块,另一个可能是,也可能不是,有些数组在达到8k时似乎被放入LOH,其他数组在85k之后)。 http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/ |
|
3
2
CLR偶尔会在LOH上放置数组。如果您通过WinDbg查看内存转储,您将看到有低于85000字节的数组。这是无证行为,但这就是它的工作方式。 因为正在对LOH堆进行碎片化,并且LOH堆从未被压缩,所以您得到的是OutOfMemoryErrors。 关于你的问题:
覆盖了对
|
|
4
0
我试了两种方法:
如果可能的话,你可以试试.NET 4.5 http://blogs.msdn.com/b/dotnet/archive/2012/07/20/the-net-framework-4-5-includes-new-garbage-collector-enhancements-for-client-and-server-apps.aspx |