非靜態變量 靜態變量
然後 ,非靜態變量的那段代碼在哈希表被清掉之後,我截圖看是這樣滴。
而,靜態變量的哈希表被情調後,內存檢測工具顯示是這樣滴。
所以,我就信任了這個 內存檢測工具..... 唉.......。
而我用資源管理器裡的東西看內存,發現,兩個代碼都是由600多M(填充1000W個實體類) 掉到300多M(全部清空)。
而我在代碼中的類型A裡添加析構函數檢測,發現兩個代碼在清空的時候,1000W個類A都被銷毀了
所以我的教訓是
1:在沒有使用到一些特殊的諸如UI,IO,數據庫,圖片,事件=.... 等地方的時候,幾乎可以完全相信.NET的GC的威力。只要你沒有某些代碼沒有死守著對象不放,GC是一定可以找到垃圾並回收的。靜態變量當然在此列
2:一些個工具什麼的其實未必要那麼信任。自己寫的代碼檢測才是王道
3:有問題就要拿出來大家一起討論,不怕丟臉,但就怕沒收獲
Main( ( i = ; i < ; i++ Dictionary<, A> dcA = Dictionary<, A> str =
List<A>();我們給這個aList填充1千萬個對象然後清空,內存會馬上會被回收。但如果是public static List<A> aList =new List<A>();我們給這個靜態的aList填充1千萬個對象然後清空,內存就絲毫不會變。而在我的業務需求中,我要求在內存中在我需要的時候一直駐留著List<A>,當其中的某個A的實例不要了我清掉,這個被我清掉的的A的實例會被回收掉。public static List<A> aList =new List<A>();aList=null,這樣的機制所以,我想了一個折中的辦法,即加入這個aList屬於 B類型,那麼我再創建一個C類型,在C類型中寫一個單鍵類,有且僅有一個B的靜態實例。這樣的話我就能實現我的業務需求了29樓的大俠給出了我的這種思想的代碼,各位前往圍觀啊
29樓的大俠給出了我的問題的答案。各位可以參考一下 這篇博客 http://www.cnblogs.com/bayonetxxx/archive/2009/06/02/1494728.html。即WeakReference 類的使用。嘿嘿