【问题标题】:Windows Form DataGridView Fast Loading [closed]Windows 窗体 DataGridView 快速加载[关闭]
【发布时间】:2017-05-08 13:08:46
【问题描述】:

我正在构建一个 Windows 窗体应用程序,在我想要的地方,当我打开像 Product 这样的窗体时,它应该加载数据库中所有可用的列出产品。连同图片。并将其显示在 DataGridView 中。 现在我的问题是在 gridview 中加载这么多数据的最佳方法是什么?

【问题讨论】:

  • 数据虚拟化。您还可以提高控件的性能(参见例如this)。但就问题而言,现在问这个问题还为时过早。你试过什么吗?你对什么不满意?
  • 网格的性能。当我加载这么多数据时,它(gui)被绞死了很多

标签: c# sql sql-server winforms entity-framework


【解决方案1】:

如果您想在DataGridView 中显示数据,并且您怀疑会有很多数据(可能太多以至于将其完全加载到内存中可能会出现问题),您应该使用它的VirtualMode能力。请参阅 MSDN 文章,"Walkthrough: Implementing Virtual Mode in the Windows Forms DataGridView Control"

“当您想在 DataGridView 控件中显示大量表格数据时,可以将 VirtualMode 属性设置为 true 并显式管理控件与其数据存储的交互。这使您可以微调控件的性能在这种情况下。”

基本上,虚拟模式意味着DataGridView 控件将在需要数据时提升CellValueNeeded event。您订阅此事件的处理程序并“即时”获取所需的数据。这使得在内存中只保留完整数据集的一小部分成为可能。

您可以在内存中保留哪些数据记录以及保留多少数据记录。一些可能的策略:

  • 您执行分页,即从数据库加载一大块连续的行。这需要已知的排序。也就是说,您需要能够从DataGridView 的当前排序中派生ORDER BY SQL 子句。 (查看"Using OFFSET and FETCH to limit the rows returned" 了解如何在 SQL 级别实现分页。)

  • 您从数据库中获取单行。这可能比分页效率低,但如果您无法确定与 DataGridView 的当前排序标准匹配的 ORDER BY 子句,则效果会更好。

无论哪种情况,请查看我上面链接的文章,了解如何使用虚拟模式的教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多