一般程式設計師()都會這樣認為:用c#這樣的語言程式設計的乙個好處就是無需再考慮記憶體的分配和釋放。你只需建立物件,然後通過一種叫做垃圾收集的機制來處理這 些物件,也就是說:當它們不再被應用程式需要的時候來自動的清除這些物件。這個過程意味著c#解決了其它語言中極難處理的問題──可怕的記憶體洩露。真的是 這樣嗎?
其實不然,讓我們先了解一下垃圾收集的工作原理。垃圾收集器的工作就是尋找那些不再被應用程式需要的物件,當它們不會再被訪問或引用的時候清除它們。(一定要注意是在不會再被訪問或引用的時候才清除它們)
乙個物件只有當它不再被引用的時候才會被當作是無用的 ,所以我們在宣告物件和定義變數的時候最好是在定義的時候 給乙個null,
如果 到本行**以後不會再使用這個物件了, 請把它設定為null
例如//二級**表
privatedatatable _dt_two =newdatatable();
//使用者表
privatedatatable _dt_officeinfo =newdatatable();
這樣做很明顯是不合理的,因為你也不知道在使用的過程 中到低會不會載入資料,當然這樣確定 不會再出現未對物件引用到物件例項這樣的錯誤 了,
當然也說明了乙個問題,這樣做是不合理的,正確的應該是這樣
而當使用的時候 再給其真正的值。
//二級**表
**當不再使用的時候 應該給其乙個null
//二級**
privatedatatable _dt_two =null;
//使用者表
privatedatatable _dt_officeinfo =null;
//資料
_dt_two =getdatatable();
_dt_officeinfo =getdatatable();
_dt_two =null;
_dt_officeinfo =null
當明白了它的**機制之後我想我們應該知道 怎麼樣去做了,當然有的程式 員會說沒有時候這樣寫,呵呵 ,其實我感覺
**的規範還有合理不合理,和時間真的沒有太大關係 是個人的習慣而已,當你寫的習慣了也就不感覺 不舒服了,而且 會喜歡上規範的**
,因為程式以後的路大多都 是在抄前面寫的**,如果 你之前都 寫的很棒了,那為以後的發展幫助會是巨大的。
發文後說明
老趙說的是,我做過試驗,還有 anders liu
所說的」代「
一種是:
gc.collect() 這種方法對所有的代進行**
另一種是:
gc.collect(int) 這種方法對0、1、2代,指明的代進行**。
我測試了一下,記憶體有時候確實有變化但不是太明示,不過也有,我記錄下來的記憶體變化,發現
,在有的時候 設定dispos()方法或close()方法時,如果不使用using或try{} finally{}進行釋放,如果沒有進行有效釋放的話,會導制物件進行二次** .這樣一下反而是得不嘗失了。
ADO防止記憶體洩露和減少記憶體開銷的方法
boqing 自己琢磨的,如果您發現不當之處,望不吝賜教 1 createinstance 後不要忘記release 2 open後不要忘記close 3 盡量保證資料管理類只有乙個例項。一 建立乙個資料管理類cdatamange,本類只能建立乙個例項,具體方法 l 建立成員變數,私有,靜態 pri...
STL之防止記憶體洩露
可以自由分配和釋放記憶體造就了c 的靈活和強大,但這也是使用c 最容易出現問題的地方,記憶體洩露問題,估計程式猿都會或多或少的遇到,也遭受了很多程式猿們的深惡痛絕,無數個加班的晚上可能就是因為少了乙個delete的緣故。用過c 的人基本上都應該會了較過乙個叫stl 標準模板庫 的東西,這個東西在一定...
檢查C 記憶體洩露的方法
怎樣檢查你的 有沒有記憶體洩露呢?需要在前面加上這些 ifdef debug define debug clientblock new client block,file line else define debug clientblock endif define crtdbg map alloc...