看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) gcnew 動態產生的記憶體,.NET garbage collection 並未幫我釋放。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Visual Studio 2005 with .NET Framework 2.0 有問題的code: (請善用置底文標色功能) void ROIFilter(Byte *dataPtr, int width, int height, int start, int end, int base) { Rectangle region = Rectangle(0, 0, width, height); Bitmap ^regionImage = (gcnew System::Drawing::Bitmap(width, height)); Graphics ^regionImageGraphics = Graphics::FromImage(regionImage); GraphicsUnit units = GraphicsUnit::Pixel; regionImageGraphics->DrawImage(m_ProcessImage, region, region, units); delete regionImageGraphics; // 取得 regionImage 的 BitmapData (LockBits) // 開始處理 // UnLockBits delete regionImage; -> 不加就不釋放 } 補充說明: 我是從一個 .avi 檔案中取得每一張影像,然後只針對我感興趣的部分作處理,所以為了 方便起見,我把要處理的 Bitmap,複製 ROI 到 regionImage,就開始處理,不過我突然 發現記憶體不斷增加,造成我一個30~40秒的影片檔,記憶體上升140MB左右,處理完也沒 降回來,然後我做了最後那一行「delete regionImage;」,記憶體使用量就正常了,所 以我蠻疑惑這是為什麼? 謝謝 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.25.4 ※ 編輯: llama 來自: 140.115.25.4 (10/29 12:23)
james732:gc機制不會"馬上"回收 10/29 12:30
llama:我知道啊!!但是影片播完後!!等了幾分鐘,記憶體還是沒釋放~ 10/29 23:58
llama:去找找有沒有相關文件好了~ 10/29 23:58
ledia:resource 用完設成 NULL 呢? 10/30 11:44
ledia:理論上 gc 會在他確定你不會再用到該物件才會回收 10/30 11:45
ledia:或者參考上面那頁 10/30 11:54