[問題] 記憶體回收速度差強人意

看板C_Sharp作者 (文組工程師)時間8年前 (2016/07/02 02:55), 8年前編輯推噓0(0011)
留言11則, 5人參與, 最新討論串1/1
各位前輩好,小魯寫了一隻程式可以依我個人一些特殊需求來改變桌布, 實作的方法大概就是抓取指定的數張圖片, 使用 Drawing 裡面的方法將圖片拼接後輸出成圖檔,再設定其為桌布, 在拼接的過程中會 new 出幾個需要 Dispose 的物件, 由於來源也都是可以當成桌布的高畫質圖片,所以我蠻擔心記憶體的使用狀況 實際測試,每 5 分鐘運作一次圖片輸出, 開啟程式讓它運作後觀察工作管理員,剛啟動時約占用 30Mb, 當執行圖片拼接的程式後會飆升 10Mb 左右, 大概需要運作 1-3 次,也就是 40-60Mb 時,才會跳回 30Mb(執行記憶體回收?) 這算是正常使用的狀況,看起來沒有太大的問題, 但是我又測試了壓力狀況,將運作的頻率提高到 1 秒一次, 這下就精彩了,記憶體的用量根本直線上升, 待機什麼都不做只放著的話,可以衝到1G以上的用量, 但是時候差不多的時候,還是會乖乖跳回30Mb(儘管只有一瞬間), 所以可以推測應該是沒有 Memory Leak 是不是程式執行的頻率非常高,導致系統沒空或是還不確定是否能回收記憶? 我的code原則上都是用 using,或是用完就 Dispose 的寫法, 感覺程式這種表現不是很令人滿意, 是否有更快的方式命令系統把物件的記憶體吐出來呢? -- 我覺得C#是世界上最強的語言了 π紅膠咖咖褐希希▁▁▁▁ 其他的應該廢除 省寶水啡啡雨嘉 ██ - 燕嘉 □–□ 如果各位有興趣的話,可以現在開始學 但是要安裝VisualStudio    因為我們只會支援精英IDE,絕對不會接受垃圾 ψ /◣– /█◣ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.58.157 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1467399343.A.7A4.html

07/02 06:59, , 1F
gc.collect()
07/02 06:59, 1F
喔喔 感謝 這招有用,程式占用的記憶體被鎖死在20Mb了!

07/02 08:47, , 2F
記憶體還夠用幹麻急著要GC
07/02 08:47, 2F

07/02 08:50, , 3F
只要到一定的threshold就會GC,沒有沒空和不確定的問題
07/02 08:50, 3F
就是一個感覺問題,因為把它做成系統常駐程式,當然是存在感越低越好 ※ 編輯: stu87616 (114.25.58.157), 07/02/2016 11:40:44

07/02 14:13, , 4F
建議win7以前的系統用就好
07/02 14:13, 4F

07/02 19:10, , 5F
gc太常用很耗效能,看你是想要效能好還是記憶體省
07/02 19:10, 5F

07/11 11:48, , 6F
固定的幾張圖片 輪流切換 有需要一直讀取 釋放嗎?..
07/11 11:48, 6F

07/11 14:29, , 7F
memory usage 一直不是clr的強項,記憶體對它來說就是要
07/11 14:29, 7F

07/11 14:30, , 8F
拿來用的,gc.collect()是個 trade-off 的手段,如果是
07/11 14:30, 8F

07/11 14:31, , 9F
unplugged device,這方法未必適當,除了有 IDisposable
07/11 14:31, 9F

07/11 14:31, , 10F
的class 要手動 dispose 外,能放在 global 重覆用的就
07/11 14:31, 10F

07/11 14:32, , 11F
不要 new
07/11 14:32, 11F
文章代碼(AID): #1NTholUa (C_Sharp)