我有4个sql查询可以获取大量数据,其中2个分别占用大约30秒和60秒。
我打算缓存很多数据,所以在初始加载后不会花那么长时间......
然而,初始加载仍然会花费很多时间,所以我只是想知道从SQL Server获取并加载这4个数据表到4个单独的WPF数据网格的最佳方法是什么?
我不认为从SQL查询本身可以获得很多性能。它们非常简单,但瓶颈是另一个网络上链接服务器上的JOIN
。
只是异步运行每个查询并加载它们,还是有更好的方法?
答案 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
。
这是迄今为止最简单,最简单的做法......