【发布时间】:2026-01-29 07:05:01
【问题描述】:
我们有一个包含大约一百万条记录的表(25 列 int、text 和 datetime),我们需要从 SQL Lite 数据库中提取它们,然后渲染到 wpf xamDataGrid,最快的方法是什么在 C# 中?
另外,最有效的方法是什么?
我们考虑过的选项:
获取数据集
实体列表
数据读取器
CSV 数组
提前致谢。
【问题讨论】:
我们有一个包含大约一百万条记录的表(25 列 int、text 和 datetime),我们需要从 SQL Lite 数据库中提取它们,然后渲染到 wpf xamDataGrid,最快的方法是什么在 C# 中?
另外,最有效的方法是什么?
我们考虑过的选项:
获取数据集
实体列表
数据读取器
CSV 数组
提前致谢。
【问题讨论】:
您可以使用后台线程加载数据并使用主线程的 Dispatcher 填充 ObservableCollection,优先级为 ContextIdle。
Dispatcher UIDispatcher = Dispatcher.CurrentDispatcher;
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (sender,e) =>
{
// Use a linq query to yield an IQueryable/IEnumerable List of data from DB
foreach(Data data in DataList) // Enumerated here
{
UIDispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(() =>
{
myOC.Add(data);
}));
}
};
【讨论】:
Dispatcher UIDispatcher = Dispatcher.CurrentDispatcher; 确保这一行在主线程中。
DataReader 通常是连接 sql 数据库的最快方法。您可以读入它们并将它们手动解析为您自己的自定义对象集合。
Entity Framework 将为您提供应用程序方面的最佳开发体验和最佳建模抽象级别,但会影响性能。实体可以很好地轻松绑定到 WPF UI 元素。
DataSet 很容易设置,但会以一种非常丑陋的方式强制将关系数据库抽象到您的应用程序代码中。它将迫使您以非类型安全的方式将列作为字符串引用,这种方式只会在运行时中断,并且通常很脆弱,不再推荐用于任何重要项目。 (在 DataSet 粉丝跳到我的喉咙之前,这是来自 MSFT ecn.channel9.msdn.com/o9/te/NorthAmerica/2010/pptx/DEV324.pptx 的官方指导)
CSV 数组可能很快,但使用和实施起来要困难得多。
如果您需要最高性能,请使用 DataReader,但如果您需要开发人员的生产力,请使用 Entity Framework。
【讨论】: