作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1467399343.A.7A4.html
1F:→ testPtt: gc.collect() 07/02 06:59
喔喔 感谢 这招有用,程式占用的记忆体被锁死在20Mb了!
2F:→ ssccg: 记忆体还够用干麻急着要GC 07/02 08:47
3F:→ ssccg: 只要到一定的threshold就会GC,没有没空和不确定的问题 07/02 08:50
就是一个感觉问题,因为把它做成系统常驻程式,当然是存在感越低越好
※ 编辑: stu87616 (114.25.58.157), 07/02/2016 11:40:44
4F:→ testPtt: 建议win7以前的系统用就好 07/02 14:13
5F:→ O187: gc太常用很耗效能,看你是想要效能好还是记忆体省 07/02 19:10
6F:→ smmoon: 固定的几张图片 轮流切换 有需要一直读取 释放吗?.. 07/11 11:48
7F:→ enonrick: memory usage 一直不是clr的强项,记忆体对它来说就是要 07/11 14:29
8F:→ enonrick: 拿来用的,gc.collect()是个 trade-off 的手段,如果是 07/11 14:30
9F:→ enonrick: unplugged device,这方法未必适当,除了有 IDisposable 07/11 14:31
10F:→ enonrick: 的class 要手动 dispose 外,能放在 global 重覆用的就 07/11 14:31
11F:→ enonrick: 不要 new 07/11 14:32