2011年第一天上班,学习WPF chart

WPF Chart性能优化
本文记录了一次WPF Chart性能优化的经历,主要介绍了如何解决图表显示LineSeries后无法自动刷新及内存泄漏问题,并通过工具定位到Datapoint未被正确回收的原因。

做手头这个WPF的桌面程序,有一段时间了,忙忙碌碌的看着工作列表里的工作一件件的做的差不多了,终于轮到这个WPF Chart的性能问题了。 在这项目中第一次接触wpf chart控件,写了个小程序,用blend设计出自己想要的style来,就算是学习了。然后就在这个项目中使用。 首先遇到的问题就是  设置chart显示lineserias之后,绑定的itemssource没法自动刷新,不得不在后台代码中手动的对itemssource赋值,并且调用Refresh属性。这也算是把问题解决了,一棵漂亮的曲线能显示出来,并且在timer的tick事件中不断的刷新。 感觉一切OK了哈,Mentor说了别高兴太早哦,看看UI长时间运行,明显会变慢,在任务管理器中看出程序使用内存在不停增长,难道这就是传说中的内存泄漏。于是我试着隔离问题,注释到chart相关的代码,果然内存就不会增长,可是问题到底出在哪了呢?简单的对itemssource赋值,再调用Refresh函数,唯一有可能出现问题的就是Refresh chart的时候并没有那些点没有被GC回收。我百debug不得其解,越是找来公司这方面的牛人,大牛就是大牛,说了句非常经典的话:人和动物的区别就是会使用工具。越是顺手发给我一个DotTrace。这玩意能看出两个标记点之间增长哪些内存,哪些是还活着的,哪些已经被回收了。通过这个工具发现确实是那些点(datapoint)没被回收。然后大牛接着说:你这几行代码效率太低,还有这怎么频繁的在堆上new新的对象呢,还有这,能使用局部变量的地方,就不要使用类变量。。。诸如此类,我频频点头,佩服的五体投地啊。 最后大牛大手一挥在我那个函数的结束位置写了句GC.Collect()。然后又运行了一遍,发现内存不增长了。我眼前一亮,问题解决了?大牛说,这不是内存泄漏,只不过GC根据你的机器配置认为现在这个内存的消耗,它还不会去回收。等到了一定的值,就会被自动回收了。 我默默无语两眼泪啊,折腾了大半天,答案就是没问题。这个过程还是学到些东西的,以后再遇到这样的问题就不至于无从下手了。而且大牛说了,这种一直消耗内存的情况也是不好的,最好有一种策略,在不是很影响性能的前提下进行强制回收。 2011年第一天上班,还是很开心的。

转载于:https://www.cnblogs.com/xiaofengzi/archive/2011/01/04/1925857.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值