两个Ms Chart共用一个Series时,Series的资源释放问题

VS2008中用MS Chart控件做统计图,遇到这样一个问题,是关于Series资源释放的。(Series是每个Chart中要显示的数据列集合,每个Series[]有一个Points属性,可以加入多个数据点。)


问题:当有两个Chart添加了相同的Series[]时,当其中一个Chartdispose掉后,它也将其拥有的Series[]的资源释放掉了(或者把所有对 该内存块的引用设置为null),而不管另外一个Chart是否对其有引用,这样当对另外一个ChartSeries[]进行操作时,就会产生“未将对象设置到引用”的错误。按道理讲,当堆内存块仍有引用的时候,是不应该释放掉的,但是在这里,只要关闭一个Chart,不管是否还有对这些Series[]的引用,Series[]一律释放回收。

解决:为了避免因为这种机制产生错误,有两个方法可以解决。第一个方法,把第一个ChartSeries传给第二个Chart时,重新生成一个新的Series,把原来Series的点复制到新的Series中去,相当于做了原来Series的一个副本(类似深拷贝),这样即使关闭第二个Chart,清除的也是作为副本的Series。第二个方法,两个Chart共用一个Series,但是关闭其中一个Chart的时候,在Closing事件函数中,Clear掉这个ChartSeries,即chart2.Series.Clear();,这样就不会去强行回收Series的内存了。第二个方法更简单些。

两个Ms Chart共用一个Series时,Series的资源释放问题