我正在寫一個XNA程序,顯示Zune上特定圖片專輯的圖片。問題是,如果我從相冊中的所有圖片加載紋理,則程序內存不足。我嘗試一個接一個的加載,並在用戶移動到下一張圖片時調用前一個圖片紋理上的Dispose。這種方式很有效,但之後我無法從之前的圖片取回紋理,因此用戶無法在不重新啓動程序的情況下查看過去的圖片!如何在Zune XNA中加載圖片而不會導致內存不足?
回答
不要在相冊中存儲每個項目的紋理句柄。相反,使用您在處理專輯時按需處理和加載的單個程序級句柄。
是的,這是我在做什麼。我只有一個紋理手柄隨時參考一個圖片紋理。但是,一旦從圖片訪問紋理,即使爲手柄分配了不同的紋理,紋理也不會消失。它似乎被緩存在某處。如果我在紋理上調用Dispose,我無法從圖片中取回紋理。每次我調用GetTexture時它都會一直返回null。 – anonymous 2009-06-29 16:41:15
我會建議你只做一次數據處理,並存儲文件名(所以你只需要做所有的層次/排序一次)。然後只需要加載一張圖片(正如前一篇文章所建議的那樣)。
這個方法的問題是Content.Load(string)會加載你的紋理,但是如果你失去了指向紋理的所有指針,那麼ContentManager將把紋理保留在內存中,這樣如果你再次加載它,它會立即加載。有一種方法Content.Unload(),這將刪除這些緩存的項目,請參閱:
關於這個主題的論壇討論:
http://forums.xna.com/forums/p/25978/141761.aspx
肖恩哈格里夫斯解釋它:
http://blogs.msdn.com/shawnhar/archive/2006/09/06/743437.aspx
的方式我將實現這是要麼每次你停止使用圖片調用卸載,或者如果你想更快的加載(這取決於用戶多久改變一次圖片,如果他們打算通過圖片輕鬆地快速卸載每一次是一個壞主意)嘗試捕捉內存異常,只調用卸載恩。
- 1. 如何編寫圖像而不會導致Java內存不足?
- 2. 是否會由於內存泄漏而導致內存不足?
- 3. 多線程下載圖像會導致內存不足異常
- 4. Javascript會導致Chromium內存不足
- 5. SqlAlchemy session.add()會導致內存不足?
- 6. UICollectionView和圖像加載導致內存不足
- 7. 在Android中顯示圖像會導致內存不足錯誤
- 8. 加載大量的圖像導致內存不足
- 9. 使用大型位圖會導致內存不足異常
- 10. 導航導致內存不足異常
- 11. 位圖調整大小會導致內存不足
- 12. Android:unarceling會導致內存不足異常。如何檢查物體?
- 13. 如何從「onPictureTaken」旋轉圖片而不會出現內存不足異常?
- 14. 可能會導致內存不足導致圖像處理失敗?
- 15. 內存不足加載圖像查看
- 16. createBitmap導致內存不足錯誤
- 17. Mockito,jacoco和surefire導致內存不足
- 18. 的XQuery導致內存不足錯誤
- 19. np.mean()導致內存不足的錯誤
- 20. c#BlockingCollection導致內存不足
- 21. 由於For循環中的堆內存不足導致內存不足?
- 22. Android setBackgroundResource導致內存不足excepiton
- 23. 三元IF導致內存不足
- 24. 加載圖片時出現內存不足
- 25. 顯示圖像會導致內存錯誤(31961104字節分配內存不足)
- 26. SQL將圖片下載到圖片框'內存不足'錯誤
- 27. 在Win10 Anniversary上安裝VB6會導致內存不足
- 28. 內存不足錯誤而加載的位圖
- 29. 圖片先加載,那不是? (XNA)
- 30. 爲什麼內存不足會導致Colorbar在Matlab圖形中無響應?
爲什麼不重新加載它,使用相同的邏輯? – GalacticCowboy 2009-06-29 16:11:51
好吧,我必須經過檢索所有圖片,然後在將它們呈現給用戶之前按順序對它們進行排序。每當用戶按下後退按鈕查看過去的圖片時,這樣做會很瘋狂。當然有更好的解決方案? – anonymous 2009-06-29 16:25:09