大型TChart需要很长时间才能画出来

时间:2011-01-22 12:00:57

标签: delphi delphi-7 teechart

热门帖子:我接受​​了答案,但这对我不起作用。我将发布a new question,强调Delphi 7.感谢所有提供了一些好输入的人


我在一小时内每隔一秒进行一次测量。

我之前有一个问题,即更新TStringGrid需要45秒才能达到“比眼睛看得更快”。部分是通过移动循环的一些计算和数据库相关的功能,但是 - 令我惊讶的是 - 真正产生差异的变化是在循环之前将strindgrid的rowCount设置为3600而不是在循环内增加它。

现在我和TChart有类似的问题。也许如果我尝试预先分配图表?所以,我可以Chart1.Series[0].Count := 3600,但我不能使用AddXy()Add(),那么我将如何明确地设置系列值?

我有一个非常简单的图表,在y轴上有浮点数,在x轴上有小时:秒

任何人都可以提供帮助,或建议其他方法来加快图表绘制速度吗?


更新:有些人建议使用TFastLineSeries,但我不知道如何使用。

啊哈 - 双击图表,显示所有系列,选择一个&点击更改

3 个答案:

答案 0 :(得分:5)

您可以在Steema website

上找到有关快速制图的“官方”建议

答案 1 :(得分:4)

我设法在眨眼之间绘制毫安数据点。我是这样做的: 你可以做的是为X和Y值创建两个数组,用你的值填充它们,然后将这些数组填充到你的图表中。例如:

var
  XValues, YValues: array of double; 
begin

  SetLength(XValues, numberofValues);
  SetLength(YValues, numberofValues);

  for ix := 0 to numberofValues - 1 do 
  begin
    XValues[ix] := ...your values
    YValues[ix] := ...your values
  end;

  Chart.Series[0].XValues.Value := TChartValues(XValues);
  Chart.Series[0].XValues.Count := high(XValues);
  Chart.Series[0].XValues.Modified := true;
  Chart.Series[0].YValues.Value := TChartValues(YValues);
  Chart.Series[0].YValues.Count := high(YValues);
  Chart.Series[0].YValues.Modified := True;

使用TFastLineSeries而不是常规TLineSeries也可以加速绘图。使用FastlineSeries时,您还拥有DrawAllPoints属性。设置为false时,绘图速度更快。然后,TChart将跳过与屏幕上其他数据点共享相同X位置的数据点。它只会得出这些的第一点。

在这里您可以找到DrawAllPoints选项:alt text

答案 2 :(得分:2)

我想对Michael Schmooks的回答发表评论。使用高(XValues)设置系列的计数值会导致数组中的最后一项不显示。这是因为高(XValues)返回数组的最高索引,而不是数组的大小。

当然,只有在恰好添加非常低的项目时才会注意到这一点。

Chart.Series[0].XValues.Count := high(XValues) + 1;