.net与数据绑定的窗体,速度太慢

时间:2010-03-27 08:50:20

标签: c# .net winforms performance ado.net

我有一个Windows应用程序,其中表单与数据绑定。

由于数据量大,表单加载缓慢。我还在表单中显示分页以浏览记录。

如何提高效果?

4 个答案:

答案 0 :(得分:3)

底线 - 您的应用需要有效地“分页数据”。

这意味着,您需要“延迟加载”数据。 UI应该只加载和显示它需要显示的数据;因此,仅在需要时才加载其他数据。

由于您没有提供有关您的应用和您加载的数据的大量信息。

因此,我们假设您的应用程序获取10,000,000,01条记录。

  • 加载表单
  • 例如,如果您的网格每页显示25条记录,请使用TOP 100获取前100条记录,然后填写您的第一页和接下来的四页。
  • 在每个Next或连续'Nexts'后,您可以点击数据库以获取下一条记录。请注意,您需要一些机制(ROW_NUMBER?)来跟踪所提取的记录,行号等。

article确切地讨论了你所追求的和我所指的是什么。

答案 1 :(得分:2)

如果不了解更多有关您的应用程序的话,很难肯定地说,但是想到的最直接的事情是,如果您的数据集很大,您应该在数据库端进行分页(通过使用行计数约束查询)而不是在申请方面。

数据绑定是.NET的一个便利功能,但它带来了严重的性能开销。一般情况下,只能处理少于几千行的小数据集,这些数据集最多只能绑定到几十个控件。如果数据集变得非常大,它们会非常快速地收费,并且不会进行任何调整以使应用程序快速完成。关键是始终限制数据绑定系统在任何给定时间处理的内存量,以便它不会因元处理而过载。

答案 2 :(得分:1)

以下是一些建议:

  • 找出您需要携带大量数据的原因。屏幕上显示的大量数据不会带来良好的用户体验。如果这是搜索结果或其他内容,请限制搜索结果,例如100,并让用户知道还有更多,但他们需要更细粒度的搜索条件。
  • 检查以确保您的数据库查询得到了很好的优化和索引,并且您没有带来超出您需要的数据。
  • 假设您正在使用DataGridView,请查看是否利用VirtualMode帮助。下面的描述来自msdn,并且还有一个链接到那里的例子。
      

    虚拟模式设计用于非常大的数据存储。当VirtualMode属性为true时,您创建一个具有一定数量的行和列的DataGridView,然后处理CellValueNeeded事件以填充单元格。

如果您正在使用其他控件,则可以查看该控件是否提供了类似的功能。 ListView也有VirtualMode。

  • 启动SQL事件探查器,以查看数据库中您的应用程序需要什么。您可能会看到一些不必要的调用,减少数据需求和延迟加载的机会。还可以调试和分析您的应用程序,以查看您花费大部分时间的位置。

答案 3 :(得分:0)

如果您使用的是SQL Server,请实施paging using the Commaon table Expressions and ROW_NUBER()。这将允许您从Sql服务器获得更少的数据,并且肯定会有更好的性能。