作者stu87616 (文組工程師)
看板C_Sharp
標題[問題] 記憶體回收速度差強人意
時間Sat Jul 2 02:55:36 2016
各位前輩好,小魯寫了一隻程式可以依我個人一些特殊需求來改變桌布,
實作的方法大概就是抓取指定的數張圖片,
使用 Drawing 裡面的方法將圖片拼接後輸出成圖檔,再設定其為桌布,
在拼接的過程中會 new 出幾個需要 Dispose 的物件,
由於來源也都是可以當成桌布的高畫質圖片,所以我蠻擔心記憶體的使用狀況
實際測試,每 5 分鐘運作一次圖片輸出,
開啟程式讓它運作後觀察工作管理員,剛啟動時約占用 30Mb,
當執行圖片拼接的程式後會飆升 10Mb 左右,
大概需要運作 1-3 次,也就是 40-60Mb 時,才會跳回 30Mb(執行記憶體回收?)
這算是正常使用的狀況,看起來沒有太大的問題,
但是我又測試了壓力狀況,將運作的頻率提高到 1 秒一次,
這下就精彩了,記憶體的用量根本直線上升,
待機什麼都不做只放著的話,可以衝到1G以上的用量,
但是時候差不多的時候,還是會乖乖跳回30Mb(儘管只有一瞬間),
所以可以推測應該是沒有 Memory Leak
是不是程式執行的頻率非常高,導致系統沒空或是還不確定是否能回收記憶?
我的code原則上都是用 using,或是用完就 Dispose 的寫法,
感覺程式這種表現不是很令人滿意,
是否有更快的方式命令系統把物件的記憶體吐出來呢?
--
我覺得
C#是世界上最強的語言了
π紅膠咖咖褐希希C ◥▁▁▁▁ ◢
麥
其他的應該廢除
省寶水啡啡雨嘉 # ◤
██ /-
科
石 腳 燕嘉 □–□◢◤ 舒
如果各位有興趣的話,可以現在開始學
本 ▼ㄑ ◢ 服
但是要安裝
VisualStudio ▼ㄧ /◣ 特
因為我們只會支援
精英IDE,絕對不會接受
垃圾 ψ ◢ /◣– ◤ /█◣
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.58.157
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1467399343.A.7A4.html
→ testPtt: gc.collect() 07/02 06:59
喔喔 感謝 這招有用,程式占用的記憶體被鎖死在20Mb了!
→ ssccg: 記憶體還夠用幹麻急著要GC 07/02 08:47
→ ssccg: 只要到一定的threshold就會GC,沒有沒空和不確定的問題 07/02 08:50
就是一個感覺問題,因為把它做成系統常駐程式,當然是存在感越低越好
※ 編輯: stu87616 (114.25.58.157), 07/02/2016 11:40:44
→ testPtt: 建議win7以前的系統用就好 07/02 14:13
→ O187: gc太常用很耗效能,看你是想要效能好還是記憶體省 07/02 19:10
→ smmoon: 固定的幾張圖片 輪流切換 有需要一直讀取 釋放嗎?.. 07/11 11:48
→ enonrick: memory usage 一直不是clr的強項,記憶體對它來說就是要 07/11 14:29
→ enonrick: 拿來用的,gc.collect()是個 trade-off 的手段,如果是 07/11 14:30
→ enonrick: unplugged device,這方法未必適當,除了有 IDisposable 07/11 14:31
→ enonrick: 的class 要手動 dispose 外,能放在 global 重覆用的就 07/11 14:31
→ enonrick: 不要 new 07/11 14:32