chart的addxy()画图,怎么把数据导入虚拟内存去操作addxy()?操作完成,怎么释放??
  请给个具体的例子吧??
 
 比如:
  t:=0;      //实型数据
  for i:=0 to 87459211 do
   begin
      t:=t+0.01      //单位是秒(s)
      for j:=0 to 3 do
        chart1.series[j].addxy(t,random(i));          //怎么导入虚拟内存去操作??
   end;
      
        请大家帮助,很急的!!

解决方案 »

  1.   

    to bdmh
      这是一个画曲线图的小程序。
      首先,有87459212个数据要画在chart上;
      其次,chart上有4条曲线呀!这四条曲线的时间是相同的(即是x轴),y轴不同是随机数,实型的。  我的意思:把画图这句或者这整个代码段怎么放入虚拟内存去操作????
      

  2.   

    画好指的什么的。。
     生成bmp文件结构?
    还是更新 对应的控件你清楚数据结构  如何读入 何时读入自己控制就好了内存一般是delphi自己分配的 你不用管
      

  3.   

     TO Jonix
     离屏技术,是什么?
      实质上,就使用delphi的chart画曲线图,因为数据太大,画图的时候十分占内存,出现溢出,而且速度也很慢。我不知道怎么解决?所以考虑把虚拟内存使用起来或者用内存不累加,叠加方式,就是取一部分放入内存画完图后,释放掉,又调同样大小的一块数据到内存,画完图,同上操作,大家有没有做过,请赐教吧。谢谢
      上面这是我的想法,不知道怎么实现??
      

  4.   

    肯定不是BMP图形了,是具体的曲线图,能操作的曲线图了
      

  5.   

    我电脑的内存是1G的,我用的delphi的chart画图,画曲线实时图,边调数据边画曲线图。数据类型是实型,数据个数是几百万条。所以出现内存溢出,怎么解决呀??谢谢了
      

  6.   

    高手们救命呀!!有知道delphi的chart画图的吗?麻烦出来帮帮忙吧!谢谢
      

  7.   

    chart画图确实会越来越大,但你所谓的“虚拟内存画图”也没任何作用,虚拟内存的效率比内存低太多了实时画图有两种方法,一是设定总画图点数,即系统只花最近的XXX个点,太早的就不要画了。 还有个办法就是数据太多的时候,抽点画,每10个点画9个丢一个;再多了就10点画8个…………
      

  8.   

    TO skylkj
     我现在就是使用的你第二种方法丢点画图,不完美,因为丢点多了当把图形放大后就发现图形出现差异,还有数据错误。数据之大,最大考虑1亿个数据点。而且要求在一个chart屏幕上显示所有。其实,最初看见这个庞大数据时,我考虑使用的分段画图,就是把所有数据分成很多屏,而且只在最后一屏显示,其他就通过左右移动来查看(放大、缩小和还原),当前要显示的那屏就画图,不显示的就清空画图。这样做,速度很快,效率高,但是不利于查看整个图形里数据实际意义。放弃了
      

  9.   

    TO delphiguy
      当前显示的是所有点,比如1亿个点所描绘出来的图形。
      

  10.   

    to vividw
      车速、里程的每个点,10毫秒取一个点。看车辆一个月运行的情况,实际就是在图形上的反映呀。
      对数据处理上,有好的点子吗?请赐教。谢谢
      

  11.   

    可以 建 哈希表   
    存储上参照下读取的方式。。 或者直接存储的时候生存图。 这样可以大大缩减运行的时候循环
    看图就不要用chart了 可以考虑用gdi api 
      

  12.   

    参考一些地图的读取
    分成小图 不同比例缩放的 图读取的时候可以快很多。。
    像google map的静态图。。
      

  13.   

    to delphiguy
      在chart里,能显示的,只是图形数据比较密集。所以要看某一段,用游标放在该部分,放大呀。每条曲线是清晰的。在chart里画图随着数据增加,图形不断收拢嘛。
      

  14.   

    gdi api  是什么?其实读取图目前倒没有什么困难?现在关键是画图,addxy()的时候有困难,太吃内存了。出现溢出。而且速度也慢。
      

  15.   

    我上面说的方法是自己处理。。 不用chart
    你要费用 chart的画就是在 生成数据的同时 直接生成chart。。
    程序使用的时候直接 读chart
    你研究下chart 控件
      

  16.   

    我现在就用的chart控件画图呀。个具体点嘛。谢谢。
      

  17.   

    1你放弃chart自己用我上面说的方式 生存图
    2研究下chart 直接在生成数据的时候 写chart 对象 保存成磁盘文件。。
      

  18.   

    没明白 vividw的意思。请给个具体的代码吧。
      

  19.   


    1.是不是不用chart画图?那用什么控件呢?
    2.没有理解。chart直接生成数据?什么意思嘛?chart不是使用addxy添加点的吗?
    3.chart理解确实不深,初用啊。摆脱帮助,谢谢,我在线等着的,急的
      

  20.   

    你说的生成图是静态的图形吧,比如image之类的吧。我这里不要静态图,我的图画出来还要操作,比如放大、缩小,游标移动,显示数据等等,而且,画图的数据量还很大。就是这个数据量大是瓶颈,我要解决的。也是提问大家的
      

  21.   

    qq短信 你了加 qq传代码我改下试试
      

  22.   

    双缓冲?
    http://www.99inf.net/SoftwareDev/Delphi/36429.htm
      

  23.   


    我知道你的意思是要一次把所有数据全添加进chart,然后就可以左右拉动,放大、缩小显示了。数据量小是可以的,但是数据量太大,就不能这么做了,只能把数据放在内存或文件中,每次只添加当前需要的部分到chart,然后根据需要把当前添加的数据清掉再加新的。
      

  24.   

    addxy(x,y)添加点,可不可以不在内存操作?要不就是添加点完成后怎么去释放该点??
      

  25.   

    画几十万个点不太现实,不管你用什么方式肯定是费时费力,效率低。可参考下Google的地图管理模式。或股票软件的管理模式,它们肯定不会提取几十万条记录来生成图片或曲线图的。
      

  26.   


    第一种方法,TChart.Series[].clear; 再重新+添加点。
    第一种方法,TChart.Series[].XValues[]、TChart.Series[].YValues[]直接修改点。
      

  27.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to 9 do
        Chart1.Series[0].AddXY(i, i);
      Chart1.Repaint;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to Chart1.Series[0].Count - 1 do
        begin
          Chart1.Series[0].XValues[i] := i;
          Chart1.Series[0].YValues[i] := 100 - i * 10;
        end;
      Chart1.Repaint;
    end;
      

  28.   

    Chart 一个节点就是一个对象,画那么多肯定会爆。
    你可以考虑一下在 BMP 上画图,然后显示出来。
    用户要哪段,你就画哪段。
    这样比 Chart 要高效很多。
      

  29.   


    画在BMP上,静态的吧。难不成只是解决查看,不操作,要操作放大看某一部分,就把该部分放在chart里画图吗?可以考虑一下。我试试
      

  30.   

    是的,是一次性画图。把几百万,上亿的数据一次性添加到chart上。
    时时采点画图,多少数据,是累加每天吗?可以把软件给我看看吗?
    邮箱:[email protected]
    谢谢
      

  31.   

    说实话,我现在就是卡在这里了,才来请教大家的。
    其实,你说的方法,我都做过一个版本了,老总要求更新,要求一次加入所有点。
    还有地图的方案,我也考虑了的。静态的BMP图形也实现了的,老总都不认可。
    毕竟这个类似的软件,以前的同事做过,老总也用过,他认为能一次性解决所有数据。而我却是新手,无赖。谢谢大家肯帮助!!
      

  32.   

    a  b 2个chart 控件  开个线程
    b一次读取1亿个
    过一定时间  b 赋值给 a。可惜 chart无源码 不知道具体的 数据结构。
      

  33.   

    一亿个点(X、Y坐标),就是2亿个数据,chart里的数据是double型存储的,就是16亿字节,1.6GB,理论上win32程序的地址空间是能放得下的,但是chart的内部存储结构是怎样的,未知。你可以在win64上运行试试,物理内存足够的话,也许可以。
      

  34.   

    查看了Delphi自带的demo。发现它的数据在画图的时候,一整天下来也不怎么占内存。可惜x,y轴都是自动数据。而且好像只有自动才行。自己设定数据就不行了。我想到的就是怎么释放内存??每次ADDXY()一个数据,就释放内存一个数据,行不行哟??