【问题标题】:Optimizing TCHart drawing in Delphi 7在 Delphi 7 中优化 TCHart 绘图
【发布时间】:2011-01-24 13:30:50
【问题描述】:

我的previous question 提出了一些很好的意见,但对我没有用,因为我的问题似乎与 Delphi 7 相关。

我有一个包含单个系列 (TFastLineSeries) 和 3,600 个数据点的图表,绘制最多需要 45 秒。其他人说它应该快如闪电,所以谁能帮忙,记住我使用的是 Delphi 7 和标准的 TChart 组件。

我怀疑与其调用 AddXY() 3600 次,不如先准备数据,然后一次性添加。


更新:在 D7 中,AddXy() 函数签名是 function AddXY(Const AXValue, AYValue: Double; Const AXLabel: String; AColor: TColor) : Longint; wheretimeLabelis a string representing MM:SS. But what value should I be passing for

我用 `Chart1.Series[0].AddXY(Chart1.Series[0].Count, codValue, timeLabel, clRed


顺便说一句,我已经编写了 Chart1.Series[0].XValues.DateTime := True; Chart1.BottomAxis.DateTimeFormat := 'nn:ss'; //'hh' 或 'nn' 或 'ss' 如你所愿,例如Chart1.BottomAxis.DateTimeFormat:="dd/mm/yyyy hh:mm";

【问题讨论】:

  • 当您准备好并一次性添加时会发生什么?
  • 如果它会做你想做的事,JVCL 中的 TJvChart 在绘图方面也比 TChart 快得多,对于线系列。您可以添加 3600 个项目,并绘制一次,这保证比多次更新要快,但我确信在 TChart 中也可以这样做。
  • +1 David,这就是我想做的,但不知道如何编码
  • +1 Warren,我更愿意坚持使用 TChart。别人都说应该没问题

标签: delphi delphi-7 teechart


【解决方案1】:

也许您生成要放入图表的值的方式是瓶颈?

在 Delphi 2010 上,我测量了以下代码耗时不到 1/10 秒:

var
  I: Integer;
begin
  for I := 0 to 3000 - 1 do
    Series1.AddXY(Random(1000), Random(100));

【讨论】:

  • +1 感谢您的反馈。 Y 轴是实数(也许我应该将其舍入并转换为双精度?在 RL 中,它始终为 0 到 2,000,我怀疑有人会在视觉上注意到图表上的小数部分)。 X 轴是一个字符串(格式为 MM:SS 的时间标签,可能就是这样)。我会检查并回复你。嗯,也许它是自动缩放?不是必须在每个 AddXY() 处计算吗?
  • 另外,在D7中,函数是函数AddXY(Const AXValue, AYValue: Double; Const AXLabel: String; AColor: TColor) : Longint;我正在传递 Chart1.Series[0].Count 作为第一个参数。我想这也需要时间来计算......还是这样吗?当然,每次调用 AddXY 都会增加它?
  • +1 我给出答案是因为您帮助我了解了如何正确表达我的问题
  • 真的吗?这真的不是很慢吗?为什么要使用Real?您应该使用 Double。
【解决方案2】:

顺便说一句:在添加值之前将 Chart1.AutoRepaint 设置为 false 并在之后将 if 设置为 true 也可以加快绘图速度

【讨论】:

    【解决方案3】:

    这可能会对 TeeChart 的开发者有所帮助.... Fast line drawing with TeeChart

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2015-03-15
      • 2013-08-06
      • 2016-06-29
      • 1970-01-01
      相关资源
      最近更新 更多