2009-11-19 110 views
1

我知道.NET不使用完整的物理內存availabe。我遇到了一個System.OutOfMemoryException,而物理內存使用率僅爲79%。我運行我的系統,直到物理內存使用率達到92%。如何告訴.NET應該使用多少內存?它應該爲進程分配多少內存?

你可以看到這裏的截圖: http://a.imagehost.org/0655/CaptureOOM.gif alt text http://a.imagehost.org/0655/CaptureOOM.gif

我如何告訴.NET要使用更多的內存?

我也想知道,這是一個例外,因爲.NET沒有足夠的內存或.NET 有內存但不適用於此應用程序?

+0

您能發佈Laws.Apply(Bitmap)方法的內容(或適用的部分)嗎? – overslacked 2009-11-19 01:12:51

回答

0

確實沒有一個選項可以修改由.NET環境控制的這個選項,並擁有自己的Garbage Collection來處理內存管理。

如果您想要完成並部署可以強制GC與

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

一些註釋

以與Main方法不同的方法分配對象。這是因爲如果Main方法中的分配對象在同一方法中調用GC.Collect,則該對象在技術上仍然與運行代碼相關聯,因此不符合收集條件。

GC.Collect方法的設計目的不是控制特定的對象銷燬,而是允許強制收集所有未使用的對象。因此,這是一項非常昂貴的操作,只能在需要/需要強制全局收集的情況下使用。 對於需要強制結束特定對象的情況,應該實現Dispose模式。

希望這會有所幫助。

2

OutOfMemoryException與物理內存無關。這是因爲你沒有足夠大的連續虛擬內存塊。有時如果用完了文件句柄或其他有限的資源,.NET甚至會拋出OutOfMemoryException異常。

0

你在虛擬機上運行它嗎?是否分配了足夠的虛擬內存空間?您嘗試完成的分配有多大?

你真的需要做更多的取證調試來弄清楚什麼是失敗和函數的參數。

相關問題