[問題] gcnew 甚麼情況需要作 delete ??

看板C_and_CPP (C/C++)作者 (阿譽)時間16年前 (2009/10/29 12:22), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 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)

10/29 12:30, , 1F
gc機制不會"馬上"回收
10/29 12:30, 1F

10/29 23:58, , 2F
我知道啊!!但是影片播完後!!等了幾分鐘,記憶體還是沒釋放~
10/29 23:58, 2F

10/29 23:58, , 3F
去找找有沒有相關文件好了~
10/29 23:58, 3F

10/30 11:44, , 4F
resource 用完設成 NULL 呢?
10/30 11:44, 4F

10/30 11:45, , 5F
理論上 gc 會在他確定你不會再用到該物件才會回收
10/30 11:45, 5F

10/30 11:54, , 7F
或者參考上面那頁
10/30 11:54, 7F
文章代碼(AID): #1AwHXkPq (C_and_CPP)
文章代碼(AID): #1AwHXkPq (C_and_CPP)