顶帖:我已经接受了答案,但对我来说不起作用。我将发布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选项: