|
|
1
16
我认为问题不在于垃圾收集器没有做好它的工作。如果GC处于内存压力之下,它应该运行并回收您刚刚分配的400 MB。 这更有可能是因为GC没有找到 惊人的400 MB 块
你应该看看Eric Lippert的博客 "Out Of Memory" Does Not Refer to Physical Memory 你做得更好 二者都 以下的。
在Dotnet 4.5之前,
小型对象堆(SOH)
和
大型对象堆(LOH)
看见
Large Object Hearp Improvements in .NET 4.5
布兰登·布雷。你的
|
|
|
2
1
看起来您分配的资源太多,超出了系统的处理能力。你的代码在我的机器上运行良好,但如果我这样更改它:
我和你犯了同样的错误。 但是,如果我将目标处理器更改为x64,那么代码就会运行,这似乎是合乎逻辑的,因为你可以寻址更多的内存。 关于这篇文章的详细解释: http://www.guylangston.net/blog/Article/MaxMemory 关于这个问题的一些信息: Maximum Memory a .NET process can allocate |
|
|
3
1
首先
这里的主要问题似乎是
以下是一个示例,它证明了对象不能被垃圾收集:
|
|
|
4
1
当您确信有必要清理未引用的对象时,请尝试强制进行垃圾收集。
另一种选择是使用
但是,在一般情况下,最好使用 一个足够小 缓冲区(数组,分配一次),并将其用于读/写调用。避免 许多大型物体 在.NET中(请参阅 CLR Inside Out: Large Object Heap Uncovered )。 使现代化
假设
|