我正在开发一个Windows应用程序,其中我有一个网格控件,我想从我的MS访问数据库显示不同的查询输出。 我有12个查询,其结果大约有75列和1000行 有不同的菜单可以调用并显示此查询结果
如果我每次单击菜单并通过访问数据库加载它并且大约需要15秒钟来读取查询。为了避免这种情况,我打算在应用程序启动时加载内存中的所有查询,基本上创建一个数据集并将所有表存储到其中,现在通过不同查询的显示和访问变得更快。
我的问题是 - 这是正确的我在做什么?如果没有其他更好的方法来处理这个? 转向WPF会有帮助吗?或者我需要照顾的任何其他事情。
如果这是一个愚蠢的问题,请帮助我并抱歉
答案 0 :(得分:0)
首先,创建数据库以有效地存储数据和查询。在内存表中具有相同的数据结构并且类似地查询通常会导致性能降低。但是如果你改变数据的结构(创建临时表或只是存储查询的结果)那么情况就完全不同了,但同样地,性能应该非常相似(这次内存缓存会更好 - 尽管数据库也可以将查询结果缓存在内存中)。假设数据库设计正确(主要是索引可以使用并由查询使用)。
据我所知,与你提到的时间(15秒)相比,WPF和WinForms之间的性能差异可以忽略不计。 WPF和WinForms都会在几分之一秒内显示适合屏幕的控件数量。当然,有一些注意事项,但WPF和WinForms都有足够多的适用于您的应用程序。
我的建议是尽可能优化查询,考虑为常用数据创建临时表,然后将结果缓存到内存中(除非你知道b-tree,否则不要在内存中连接!)。然后只获取所需的数据(不获取所有1000条记录,先获取20条并立即显示它们)并显示它(重用控件),必要时在后台线程中获取。继续在后台线程中获取数据,试图预测用户将做什么以及可能请求哪些数据。
TLTR:1)优化,然后2)缓存,3)在后台获取,4)重用UI控件,5)仅显示可见的内容。