【发布时间】:2025-12-21 04:20:20
【问题描述】:
我目前正在开发一个包含多个模块的 Windows 窗体应用程序。其中一位负责绘制生成的模拟数据。情节的想法实际上很简单,但我正在努力有效地渲染数据。
所以我的问题是:
- 绘制如此大量数据的最佳方法是什么?
- 在位图上绘图是正确的选择吗?
- 我是否缺少一个基本的 .net 框架或其他为我提供此功能的框架?
要绘制的点以(时间,位置)形式的列表点提供,即我们有两个轴。
我尝试了以下方法:
我尝试一次绘制所有电梯的点 --> 是资源密集型的,并且在调整大小事件时会重新绘制整个情节。做了两个测试:
- 在预定义的视口中绘制整个图,但这不是一个好主意,因为图形变得混乱。
- 定义时间和位置有多少像素(例如 1 秒 = 1 像素)并使面板(其中的图片框)可滚动。这比第一个选项效果更好,但如果数据太大会导致内存不足异常。
其他可能的方法:
为绘图定义一个范围(例如 timeRange = 10 分钟),然后只绘制该范围。我想象滚动有问题,因为当用户滚动时,我必须重新定义绘图的起点(范围起点所在的位置)。
非常感谢您的帮助以及任何建议、想法、cmets 等。
编辑:
我尝试了 Patrick 和 TaW 关于使用 MS Chart 的建议。事实上,这是一个更好、更容易的选择,因为到目前为止它作为我的版本被更好地编程。虽然,我提供了几个系列的数据,但我仍然遇到性能问题。也就是说,我有以下问题:
参考 TaW 的评论(见下文)关于我对大数据的意思的缺失信息 - 要绘制的模拟数据代表几个小时的时间段(例如 2 -3 小时),并且应该以 60 秒的间隔查看。
我的主要问题是图表的表现!
一些可能有帮助的诊断数据(使用秒表测量 DrawChart 方法,包括其内部步骤):
- chart1.Series.Clear() 耗时:00:00:00
- 填充图表 1.Series.Add(...data..) 占用:00:00:03.8230000
- 配置图表 1 耗时:00:00:03.8240000
- plotView.DrawChart(points) 拍摄时间:00:00:03.8290000
这告诉我图表模块中的绘图需要很长时间......
感谢您的帮助和时间。
【问题讨论】:
-
现在_这么大量的数据_到底是什么意思??据我所知,你没有给我们任何数字。查看图表控件(来自工具箱的数据部分)!
-
@TaW:感谢有关缺失数据的提示。我在上面提供了它们(检查:问题的编辑部分)
-
现在这相当于 10-15k 个数据点,对吧?其中你想看到什么的窗口 - 60??
-
@Rustom 你必须以任何方式一次绘制所有数据吗?
-
@TaW:在我从 xml 文件中加载数据后,确定内存中数据的大小。 xml 文件大小约为 50 MB,模拟数据约为。 3.5 小时(约 62'000 点,时间以 [ms] 为单位,位置以 [m] 为单位)。是的,我想以 60 秒的间隔查看窗口。
标签: c# winforms performance plot mschart