【问题标题】:Program gets slower when filling chart填充图表时程序变慢
【发布时间】:2024-05-04 21:00:02
【问题描述】:

我用 Visual Basic 编写了一个小程序,用于计算通过激光照射的产品。
图表每秒填充一个数据点,并说明输出是高还是低,并在其上制作图表,以便我们可以看到在某个时间点何时没有流量。

大约 10 小时后,程序会变得很慢,因为它每秒都会注册一次并将其放入图表中。图表在表单计时器上运行。

有没有办法让它更快或清除缓存并继续填充图表?
产品完成后,我按下一个按钮,然后将图表另存为 .jpg 并清除图表,然后它再次起作用。制作时间长达 20 小时。

【问题讨论】:

  • 我们可能需要查看一些关于添加/清除缓存的代码。

标签: performance memory charts


【解决方案1】:

20 小时内每秒 1 个数据点是 72000 个数据点。您在每秒显示和更新 70K 数据点时遇到性能问题,尽管这是在 VB 中。

您可能需要重新考虑绘制图表的方式。您真的需要向操作员实时显示所有 70K 数据点吗?如果您只显示最后的 2K 点怎么办?您不必丢弃较早的数据,只需将其保存在 csv 文件、访问数据库或其他任何地方(最好是在 MSSQL Express 或 MySQL DB 中),而不是图形对象。

如果您确实需要显示整个运行的图表,请考虑平均。如果您将 50 个点的集合汇总为 1 个平均数据点会怎样?同样,您不必丢弃实际数据,只需将其保存在其他地方即可。

在运行结束时,您可以单击报告按钮,从所有 70000 个存储点生成图表,以导出/存储为 jpg。但这是一次性的事情,即使需要一段时间 - 也不是那么关键的问题。

【讨论】:

  • 非常感谢您的回复!你让我想到不同的解决方案。这是操作员查看过去几个小时发生的情况的最佳方式,但可能最后 10000 个数据点也是一种解决方案。如何在不丢弃数据的情况下显示最后 10000 个数据点?产品完成后,数据将打印在文档上,我需要所有数据。非常感谢您与我一起思考 =)
  • 将您的数据存储在 MS Access 数据库中。您可以查询要在图表上显示的最后 X 个数据点。
  • 好的,我试试这个,但是如何存储每秒 10000 之前的每个数据点?