我正在爲direct3d採取的教程說:使用D3D,在退出我的過程之前是否需要調用release?
「...基本上,如果您創建Direct3D,但從不關閉它,它將繼續在計算機的後臺運行,直到下一次重新啓動,即使在程序本身關閉後也是如此,壞的,尤其是如果你的遊戲中有很多資源的話,尤其不好,因爲釋放這兩個接口可以讓所有的東西都消失,並且允許Windows收回它的內存。 (link)
我真的不相信這個教程中所說的話,這些資源仍然會掛你退出程序後...
一樣,如果我的程序崩潰或我只需按下停止在調試。這些資源是否仍在徘徊?和其他使用directx的遊戲一樣,我經常通過殺死這個進程來關閉它們。
如果我退出我的進程並且不要調用設備 - >釋放,資源是否可以免費提供給操作系統?
清理內存(調零)和將其釋放以供進一步使用是有區別的。我懷疑後者在流程退出時沒有完成。但是,是的,寫入視頻內存的東西會在應用程序調用中持續存在,但事實上這些東西都位於下一個應用程序展示的視頻內存中,這個內存被重新分配給新的應用程序,因此沒有內存泄漏。 – 2011-05-26 16:13:47
「清理」!=「清零記憶」就我而言。你是正確的,進程系統內存被釋放,但視頻設備資源(內存)不是,這取決於你的[D3DPOOL使用] http://msdn.microsoft.com/en-us/library/bb172584(V = vs.85 ).aspx - 此內存的設備部分與應用程序無關(並且在我的情況下使用了D3DPOOL_MANAGED)。我還會指出,在第一次測試應用程序迭代之後,以及在下一次迭代開始之前(它們持續存在),這些工件在桌面上可見,直到添加了EvictManagedResources爲止 – holtavolt 2011-05-26 17:49:13
無論您將D3D資源分配給哪個池,它們將在應用程序終止時自動釋放並返回給驅動程序,即使它崩潰。它們不會被清零或覆蓋,因此在第二個進程中使用新分配但未初始化的緩衝區仍可能會顯示舊內容的一個偏離版本。但即使您在退出之前手動釋放第一個進程中的每個資源指針,情況也可能如此。 – Alan 2011-05-27 15:07:52