2010-08-05 156 views
1

我在運行時收到OutofMemoryException,並顯示消息「內存不足以繼續執行程序」。我在程序開始時加載圖像。每個圖像是50 + MB。如果圖像大小增加到277 MB,那麼我得到這個異常。我一次加載圖像,因爲我必須在開始時顯示縮略圖。在運行時收到OutofMemoryException,並顯示消息「內存不足,無法繼續執行程序」

我在考慮緩存和分頁解決方案。我有任何可能使用更多的系統內存或其他解決方案。

謝謝

回答

1

你或許可以嘗試讓你的程序訪問更多的內存,但這將是一個掙扎。對於.NET應用程序,內存量由machine.config文件中的processModel/memoryLimit設置控制。 Microsoft建議您將其設置爲不高於60%。

但是,您一次加載50多個MB圖像,以顯示縮略圖(可能很小)。我建議這是你進行改變的地方。您可以逐個加載圖像,然後生成縮略圖並立即釋放內存。

在任何情況下,當您嘗試顯示縮略圖時,有50 MB +圖像效率不高。你不能只保存縮略圖,不必每次都生成縮略圖嗎?

+0

感謝雨果。這是個好主意。 – Saghar 2010-08-06 13:24:47

3

是否有任何可能使用更多的系統內存或其他解決方案。

切換到64位是唯一的簡單選項。

每個對象有1GB的底層.NET限制(也適用於64位),但這不是你的問題。要創建一個對象,.NET需要有足夠的連續空閒內存。一旦處理了幾個非常大的(> 250MB)大型對象,就不可能有足夠的連續地址空間可用。

選項:

  • 使用多個進程和進程間通信&mhash;所有帶來(尤其是在發生故障的情況下)的額外複雜性。
  • 一次只能載入一張圖片。
  • 64bit。

此外,還有關於Windows如何管理內存的「Windows內部函數」的介紹,以及.NET GC如何管理內存以供後臺使用。當你推動如此多的數據時,無法知道發生了什麼。 (像VMMap這樣的工具將會對你有所幫助,但前提是你有核心的理解它是如何工作的。)

相關問題