顶帖:我已经接受了答案,但对我来说不起作用。我将发布a new question,强调Delphi7。感谢所有提供了很好建议的人



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

我之前有一个问题,在那里更新TStringGrid花费了45秒,并设法将其降低到“比眼睛能看到的更快”。部分原因是通过移动循环的一些与计算和数据库相关的功能,但是-令我惊讶的是,真正与众不同的更改是在循环之前将strindgrid的rowCount设置为3600,而不是在循环内对其进行递增。

现在,我对TChart有类似的问题。也许如果我尝试预先分配图表?因此,我可以使用Chart1.Series[0].Count := 3600,但是比起我不能使用AddXy()Add(),那么如何显式设置串联值?

我有一个非常简单的图表,y轴为Floats,x轴为hour:seconds

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



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

啊哈-双击图表,以显示所有系列,选择一个并单击“更改”

最佳答案

我眨眼间就能绘制出数百万的数据点。这是我的方法:
您可以做的是为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选项:

10-07 15:36