最近给公司写一个图表控件,用于动态显示数据。我这这样做的,有两种显示方式,一种是线型图,一种是柱型图,在动态显示的时候,线型图需要一段连续的数据,而柱型图只需当前数据即可,但是可以同时显示多项数据,于是我就用了list和vector分别储存数据和数据项信息,类型定义如下
typedef std::list<long> _data_;
std::vector<_data_> m_data;
这样我每次向m_data对应的下标push_back一个数据就可以了,当数据超出所需要显示的范围,我就对m_data相应的下标pop_front一次,这样数据就一直是需要的数量,而不会因为时间过长而占用太多的内存。这是线型图的显示,我从末尾向前取数据,这样就可以画出当前的动态曲线了。而对于柱型图,数据区只需要一个数据就够用了,于是我在插入第一个数据之后,push_back一个数据都会pop_front一次,这样就相当于队列中只有一个1数据,在取数据的时候我就在前面取就可以了。这样没有什么问题,在WinXP下测试通过,但是到了Win2000下就不成了,线型图没有问题,问题出在柱型图上,显示完第一个数据之后就不动了,一直到输入了几次数据之后,才开始动,但是显示的确不是当前的数据,而是上几次的数据,也就是说pop_front没有起作用,在list中缓冲了数据,之后该为从后面取数据,问题解决了。但是这表明在WinXP下和在Win2000下STL性能表现有差异,Win2000会做缓冲,而WinXP不会。我没有在VC7.0下测试,不知道是不是也会是这样,希望有时间的朋友能测试一下。还有具体的原因我现在还不清楚,我的机器上没有Win2000,其他用Win2000的同事不是做开发的,机器上没有VC,我无法调试,我只是在表面现象上分析的,不过解决了。但是不清楚具体原因,希望有时间的朋友的可以测试一下,找出原因,或者知道原因的朋友踊跃回帖,谢谢!