2009/04/23

Visual Studio 中的記憶體管理

這篇也是同事的心得,因為程式一開始沒有作記憶體釋放動作,因而造成整個系統資源被吃光,希望不要再有人犯同樣錯誤。畢竟保持環境清潔人人有責。

C++中有new 和 gcnew(garbage collection new)(C#裡面的new 其實就是gcnew)

原則上managed的物件都只能用gcnew去創造

而unmanaged則是用new

這兩個東西的差別是需不需要主動去做garbage collection(delete的動作)

在managed的程式中

隔一段時間,GC會去判斷目前的記憶體空間是否沒有reference

沒有的話就會釋放出來

也可以採用GC::Collect()去做這件事(不需要特別再對每個ref做delete,delete沒有實際效果)

new的話就需要自己在確定沒有使用的時候去把他delete掉

另外還有一類,使用global的函式所給出的handle(比如canvas裡用的CreatePen)

不知道為什麼,他不會計算到程式的記憶體使用量裡面(一直create不會發現程式記憶體用輛增加)

但是因為沒有清掉,所以還是會在使用過多的時候發生問題(程式crash)

所以得要去做DeleteObject的動作

0 意見: