【发布时间】:2010-11-11 20:34:21
【问题描述】:
我找遍了所有的地方,但我无法弄清楚这一点。我正在开发一个 Winforms UI,该 UI 正在拉动我需要在 DataGridView 中显示的大量行。我已经阅读了有关限制行数和分页的所有内容,并且绝对没有好方法可以做到这一点。基本上,我正在处理我在 Codeplex 上编写的 SQL Server 2008 扩展事件管理器的 TargetDataViewer 控件。
http://extendedeventmanager.codeplex.com/
我只能根据特定目标及其呈现数据的方式来做些什么。我正在尝试做的是将已从目标读取的数据流式传输到 DataGridView,类似于 Profiler 或 SQL Server Management Studio 在数据流入时显示数据的方式。我重写了很多代码,并有一个 BackgroundWorker 拉数据并将其处理成DataTable。如果我不设置 DataGridView.DataSource = DataTable,我可以在几分钟内将 300K+ 行数据加载到 DataTable 中,它确实运行得很快。一旦我将 DataTable 添加到 DataSource,它就会慢到几乎停止(而不是几分钟,同样的 300K 行可能需要 1/2 小时)。
我知道问题不在于我的处理代码,它特定于绑定到 DataGridView.DataSource,我有计时代码来证明这一点。我不知道如何解决这个问题。对于性能,我可以在加载数据后将控件晚绑定到 DataTable,但这是一种非常糟糕的用户体验。我看到很多人在加载数据时抱怨 DataGridView 性能影响,所以这可能只是我遇到的一个限制?有什么想法吗?
【问题讨论】:
-
希望我听起来不傻。但是在这种情况下 DataReader 有帮助吗?
-
不,我有一个打开的 SqlDataReader,它为每一行提取一个非模式绑定的 XML 文档。然后我有将这个 XML 解析成一个 object[] 的代码,该 object[] 作为参数传递给 LoadRow() 方法。
标签: c# winforms datagridview c#-3.0