如何使用VS 2005(特别是C#)设计高性能网格

本文关键字:高性能 网格 特别是 何使用 VS 2005 | 更新日期: 2023-09-27 17:47:21

我需要使用 Visual Studio 2005 构建一个高性能的 winforms 数据网格,我不知道从哪里开始。我已经构建了大量的数据网格应用程序,但是当数据不断刷新时,这些应用程序都不是很好。

网格将

大约是 100 行乘 40 列,网格中的每个单元格将每秒更新 1 到 2 次(有些单元格可能更多)。对我来说,这是开箱即用的数据网格的最大缺点,重新绘制效率不高。

几个注意事项

1) 没有第三方供应商。这个网格是我们所有应用程序的支柱,所以虽然XCeed或Syncfusion或任何可能让我们更快地启动和运行的东西,但我们会猛烈地攻击它的局限性并被灌输。我宁愿预先投入额外的工作,并拥有一个完全符合我们需求的网格。

2)我可以访问Visual Studio 2008,所以如果在2008年开始会更好,那么我可以这样做。如果是折腾,我想坚持2005年。

那么最好的方法是什么呢?

如何使用VS 2005(特别是C#)设计高性能网格

如果您有许多以不同速率更新的单元格,我会推荐以下方法。与其在每次值更改时都尝试使每个单元格无效,不如通过限制刷新率来最好。

有一个计时器以预定义的速率触发,例如每秒 4 次,然后每次触发时,您都会重新绘制自上次以来已更改的单元格。然后,您可以调整更新速率,以便通过一些简单的测试在性能和可用性之间找到最佳折衷方案。

这样做的好处是不会尝试过于频繁地更新,从而降低 CPU 性能。它会在每个刷新周期之间对更改进行批处理,因此当只有最新值实际上值得绘制时,对值的两次快速更改相隔几分之一秒时不会导致两次刷新。

请注意,此延迟绘制仅适用于值的快速更新,不适用于常规绘制,例如当用户移动滚动条时。在这种情况下,您应该在滚动事件发生时尽可能快地绘制,以提供良好的流畅体验。

我们使用 Syncfusion 网格控件,从我所看到的情况来看,如果您花时间修改它,它会非常灵活。 我自己不使用控件,我的一位同事负责所有网格工作,但我们已经很好地将其扩展到我们的需求,包括自定义绘画。

我知道这并不能完全回答您的问题,但是无论您的预期如何,从头开始编写这样的控件总是比您预期的要复杂得多。 由于它会不断更新,我认为它将是数据绑定的,这本身就是一件苦差事,尤其是要让它具有高性能。 然后是调试它。

尝试从 DevExpress 或 ComponentOne 使用网格。我从经验中知道,内置网格永远不会足够快,除了最微不足道的应用程序。

我计划构建一个网格控件来执行与打发时间相同的操作,但仍然没有时间。大多数商业网格控件都有大内存占用,更新通常是一个问题。

我的提示是(如果你去自定义控制)1. 扩展控件(不是用户控件或类似内容)。它会给你速度,而不会损失太多。2.就我而言,我的目标是网格以包含更多数据。假设一百万行,大约有 20-100 个奇数列。在这种情况下,自己绘制通常更有意义。不要尝试用某些控件(如标签、文本框等)来表示每个单元格。它们消耗了大量资源(窗口句柄、内存等)。3. 去 MVC。

这个想法很简单:在任何给定时间,由于屏幕尺寸限制、人眼限制等原因,您都可以显示有限数量的数据。因此,即使您有无数行和列,您的视口也非常小,并且您必须执行的更新次数每秒不超过 5 次,即使网格 id 后面的数据每秒更新无数次,读取也很有用。还要记住,即使每个单元格要显示的文本/图像很大,用户仍然受到单元格大小的限制。

缓存样式(表示文本大小、字体、颜色等的通用词)在这种情况下也有帮助,具体取决于您将在网格中使用多少种样式。

在完成一些基本绘图(高光、网格、边界、边框等)以获得各种效果方面,将有更多的工作。

我记不清了,但是sourceforge上有一个c# .net网格,它可以让你很好地了解如何开始。该网格提供了 2 个选项,VirtualGrid 其中模型数据不由网格保存,使其非常轻量级,以及一个真实网格(传统),其中数据存储由网格本身拥有(主要是创建副本,但取决于应用程序)

对于超级敏捷(就更新而言),拥有一个"VirtualGrid"可能会更好。

只是我的想法