我有一个Datatable,它从数据库(SQLite)中获取~5,50,000条记录。提取它会降低系统速度。
我将这些记录存储在SQLite数据库的后端和Datatable的前端。 现在该怎么做才能使后端的数据库创建时间(~10.5小时)和前端的获取时间减少。
是否有其他结构可以用来做到这一点。我读过那本词典&二进制文件很快。它们可以用于此目的吗?如何?
(它不是一个网络应用程序。它是一个WPF桌面应用程序,前端和后端在同一台机器上。)
答案 0 :(得分:1)
您的基本问题我相信,不是您想要维护的结构,而是方式您管理数据流。而不是将数据库中的所有数据提取到某个结构(在您的情况下为DataTable
),而是让一些stored procedure
在服务器端上进行计算并返回给您数据已经计算好了通过这种方式,您可以获得多种好处,例如:
编辑
考虑到编辑后的帖子,我会说DataTable
已经在内存访问方面进行了高度优化,我认为将其更改为其他内容会给您带来显着的好处。我认为可以带来一个banefit是对程序流程的修改。换句话说,尝试回答以下问题:
service
进行一些计算,比方说,晚上吗?SQL Server Express
(只是示例)并获得运行stored procedure
的可能性,可能(必须被测量)更快地运行这些东西,甚至在同一台机器上?答案 1 :(得分:1)
您是否考虑过在数据位置进行计算,而不是抓取它?你能给我们一些更多的信息,比如它存储的内容以及你如何获取它以及你如何处理它。
如果没有指标和背景信息,很难确定一个受害者。
很容易说 - 是的将数据放在一个文件中。但是文件本地,是网络问题,你是否充分利用核心/线程等。
从数据开始,看看需要做些什么,然后设计出最佳的优化,这样做会好得多。
编辑:
好的,所以你在同一台机器上?在这种情况下你应该考虑的一件事是你对数据做了什么。它需要是SQL吗?如果您只是使用是加载数据表?或者是你没有透露的复杂性?
我有一个类似的任务 - 我刚创建了一个大文本文件,并使用内存映射进行读取是有效的,没有任何开销。这是你在说什么吗?
答案 2 :(得分:0)
您可以尝试使用persisted dictionary like RaptorDB来存储和获取/操作ArrayList中的数据。概念证明不应该花费很长时间。