台灣最大程式設計社群網站
線上人數
1297
 
會員總數:245392
討論主題:189182
歡迎您免費加入會員
討論區列表 >> C# >> 物件釋放請教
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
物件釋放請教
價值 : 100 QP  點閱數:144 回應數:3

樓主

leon
門外漢
0 29
574 54
發送站內信

請問大大
如以下大概的表達
請問在FileA() 裡面所創立的Class1 class1 = new Class1(); 與 string FileString 會在 FileA()執行完畢後重記憶體中釋放掉嗎?
還是依舊會放在記憶體只是無法再次存取
反而會再記憶體內建立新的 Class1 class1 = new Class1() 與 string FileString
直到EXE 被關閉才全部釋放呢?


謝謝大大

搜尋相關Tags的文章: [ 物件 ] ,
本篇文章發表於2019-12-09 22:48
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

Ader Chen
檢舉此回應

當離開 FileA() 後, class1 與 FileString 已無法再被存取, 下次再進入 FileA() 又是另一個新的(與上次不同的) class1 與 FileString,
不過記憶體不一定會馬上被釋放,
記憶體回收請參閱下列網址:
記憶體回收的基本概念
本篇文章回覆於2019-12-10 00:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

誰是誰
檢舉此回應
Ader 的內容基本上是對的,不過有些細節可以補充

(1) 對於參考型別而言,變數和物件是兩碼子事。變數的內容存的並非物件,而是物件的參考;簡單的理解就是參考型別的變數內容是一個參考型別物件的位址。
以樓主的例子來說,Class1 class1 = new Class1(); 後面的 new Class1() 會在 heap 產生一個參考型別物件,而變數 class1 的內容則是該物件的參考。

(2) CLR 的 GC 清理物件的最簡單理解就是 "當沒有任何一個變數的內容是指向該物件的時候,GC 動作時會清理該物件。記住,這是最簡單的理解,深層的部分還牽扯到 GC generation 對於物件存留期的管理。

(3) 字串雖然屬於參考型別,但它會有一個比較特殊的處理。對於被放入字串池的字串物件,他的存留期是跟著 Application Domain 的。

(4) 區域變數本身在方法結束後就會消失,因為區域變數會隨著方法結束清空 stack 而移除。
本篇文章回覆於2019-12-13 12:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

leon
檢舉此回應
謝謝兩位大大熱心的解釋 小弟受教了
本篇文章回覆於2019-12-16 21:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.