将大量数据加载到WPF数据网格中

时间:2014-02-14 14:48:41

标签: c# sql wpf bigdata

我有4个sql查询可以获取大量数据,其中2个分别占用大约30秒和60秒。

我打算缓存很多数据,所以在初始加载后不会花那么长时间......

然而,初始加载仍然会花费很多时间,所以我只是想知道从SQL Server获取并加载这4个数据表到4个单独的WPF数据网格的最佳方法是什么?

我不认为从SQL查询本身可以获得很多性能。它们非常简单,但瓶颈是另一个网络上链接服务器上的JOIN

只是异步运行每个查询并加载它们,还是有更好的方法?

3 个答案:

答案 0 :(得分:1)

将其正式化;您的瓶颈在后端设计中,与前端应用程序无关。更改后端设计,以便每次应用程序实例启动时,您的应用程序不再需要服务器之间的连接。这可以是在数据库服务器上定期运行的简单可执行文件,并维护前端在一次命中中检索的缓存表,或者它可以是应用程序通过其访问数据库的完整服务。

此外,由于数据每24小时仅更新一次 - 并且仍然可能是一个相当大的块 - 在每个最终用户计算机上维护一个本地缓存,如果它比数据的最后一个中央版本旧,则只刷新

答案 1 :(得分:1)

在get中你可以运行查询asynch
这可能是最有效的方法

你们很想看优先约束力 PriorityBinding

另一种选择是使用BackgroundWorker来检索背景中的DataTable BackgroundWorker
至于4个DataTables你有几个选择 你可以立刻解雇他们 或者您可以在之前的完整事件中触发下一个。

答案 2 :(得分:1)

当您调用从数据库中提取数据的方法时,使用任务并行库,并且该操作将在TPL创建的单独线程上执行...

using System.Threading.Tasks;
...
Task.Factory.StartNew(() => GetLotsOfRecordsFromDB()).
            ContinueWith(t => ...);

如果您需要访问UI线程,请在TaskScheduler.FromCurrentSynchronizationContext()中使用ContinueWith

这是迄今为止最简单,最简单的做法......