none
請問如何釋放 Static 功能 RRS feed

  • 問題

  • 1.使用 Visual Studio 2015

    2.在程式中宣告:   Static Dim XX As Boolean = False

    請問變數宣告 Static 之後,是否可以釋放 Static 功能。

    謝謝

    2017年8月17日 下午 03:38

解答

  • (1) 靜態欄位 (也就是靜態變數), 基本上是掛在 Type object 上的, 欄位(變數)本身不會被釋放, 除非你把整個 Type object 從 Application Domain 卸載。

    (2) 你要問自己幾件事 (a) 這個欄位有需要是靜態的嗎? (b) 你為什麼需要釋放它 ?

    (3) 一種情況是如果靜態欄位是個參考型別變數,變數本身無法釋放,但變數所指向的物件記憶體是可以被回收的,例如:

    你在類別內宣告了

    private static object O = new object();

    然後再任一個方法中寫下

    O = null;

    即表示 O 欄位不再指向任何物件, 此時原本由 new object() 所產生的物件再經過幾個 GC 迭代後就會被回收。(但是, O 變數還是存在, 只是 O 沒有指向任何一個在 Heap 中存在的物件)

    (4) 建議你找一些資料,搞清楚 .Net Framework 型別系統中, 參考型別和實值型別有甚麼差異,變數和物件之間的關係又是甚麼。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。





    2017年8月17日 下午 04:18
    版主
  • reference型態的static變數要小心使用, 不小心的話會造成因物件使用中而無法被回收的問題
    • 已標示為解答 小玩熊 2017年8月18日 下午 02:32
    2017年8月18日 上午 12:26
  • 簡單說:不可。

    可,只有一種情況:「關了它」。

    static 好用,但沒拿捏好會造成一些問題,最明顯就是記憶體,與資料修改後的互相影響,深一點就是測試的困難性等等。非必要或沒好好瞭解 static 之前,要三思之寫。


    理直氣和,切記。

    個人

    • 已標示為解答 小玩熊 2017年8月18日 下午 02:32
    2017年8月18日 上午 01:16

所有回覆

  • (1) 靜態欄位 (也就是靜態變數), 基本上是掛在 Type object 上的, 欄位(變數)本身不會被釋放, 除非你把整個 Type object 從 Application Domain 卸載。

    (2) 你要問自己幾件事 (a) 這個欄位有需要是靜態的嗎? (b) 你為什麼需要釋放它 ?

    (3) 一種情況是如果靜態欄位是個參考型別變數,變數本身無法釋放,但變數所指向的物件記憶體是可以被回收的,例如:

    你在類別內宣告了

    private static object O = new object();

    然後再任一個方法中寫下

    O = null;

    即表示 O 欄位不再指向任何物件, 此時原本由 new object() 所產生的物件再經過幾個 GC 迭代後就會被回收。(但是, O 變數還是存在, 只是 O 沒有指向任何一個在 Heap 中存在的物件)

    (4) 建議你找一些資料,搞清楚 .Net Framework 型別系統中, 參考型別和實值型別有甚麼差異,變數和物件之間的關係又是甚麼。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。





    2017年8月17日 下午 04:18
    版主
  • reference型態的static變數要小心使用, 不小心的話會造成因物件使用中而無法被回收的問題
    • 已標示為解答 小玩熊 2017年8月18日 下午 02:32
    2017年8月18日 上午 12:26
  • 簡單說:不可。

    可,只有一種情況:「關了它」。

    static 好用,但沒拿捏好會造成一些問題,最明顯就是記憶體,與資料修改後的互相影響,深一點就是測試的困難性等等。非必要或沒好好瞭解 static 之前,要三思之寫。


    理直氣和,切記。

    個人

    • 已標示為解答 小玩熊 2017年8月18日 下午 02:32
    2017年8月18日 上午 01:16