我如何告诉.NET它应该使用多少内存? &安培;它应该为进程分配多少内存?

时间:2009-11-19 01:00:35

标签: .net memory memory-management

我知道.NET没有使用完整的物理内存。我遇到了System.OutOfMemoryException而物理内存使用率仅为79%。我运行我的系统,直到92%的物理内存使用量。

你可以在这里看到截图: http://a.imagehost.org/0655/CaptureOOM.gif alt text http://a.imagehost.org/0655/CaptureOOM.gif

如何告诉.NET使用更多内存?

我也想知道,这个例外是因为.NET没有足够的内存或.NET 有记忆但不是这个应用程序?

3 个答案:

答案 0 :(得分:2)

OutOfMemoryException与物理内存无关。这是因为你没有足够大的连续虚拟内存块。如果用完文件句柄或其他一些有限的资源,.NET有时甚至会抛出OutOfMemoryException。

答案 1 :(得分:0)

实际上没有一个选项可以修改它由.NET环境控制的,并且有自己的垃圾收集来处理内存管理。

如果您有想要最终确定和处置的对象,可以使用

强制使用GC

GC.Collect的(); GC.WaitForPendingFinalizers();

一些注释

使用与Main方法不同的方法分配对象。这是因为如果Main方法中的已分配对象然后在同一方法中调用GC.Collect,则该对象在技术上仍然与运行代码相关联,因此不符合收集条件。

GC.Collect方法的目的不是控制特定的对象破坏,而是允许强制所有未使用的对象的集合。因此,这是一项非常昂贵的操作,只应在您希望/需要强制进行全局收集的情况下使用。 对于要强制完成特定对象的情况,应实现Dispose模式。

希望这会有所帮助。

答案 2 :(得分:0)

您是在虚拟机中运行吗?是否分配了足够的虚拟内存空间?您要完成的分配有多大?

你真的需要做更多的取证调试,以确切地找出失败的原因和函数的参数。