我有一个数据表,它从数据库(SQLite)中获取约 5,50,000 条记录。获取时会减慢系统速度。
我将这些记录存储在 SQLite 数据库的后端和 Datatable 的前端。现在我应该怎么做才能减少后端的数据库创建时间(~10.5 小时)和前端的获取时间。
是否有任何其他结构可以用来这样做。我读过字典和二进制文件很快。它们可以用于此目的吗?如何使用?
(它不是网络应用程序。它是前端和后端在同一台机器上的 WPF 桌面应用程序)。
我有一个数据表,它从数据库(SQLite)中获取约 5,50,000 条记录。获取时会减慢系统速度。
我将这些记录存储在 SQLite 数据库的后端和 Datatable 的前端。现在我应该怎么做才能减少后端的数据库创建时间(~10.5 小时)和前端的获取时间。
是否有任何其他结构可以用来这样做。我读过字典和二进制文件很快。它们可以用于此目的吗?如何使用?
(它不是网络应用程序。它是前端和后端在同一台机器上的 WPF 桌面应用程序)。
我相信,您的基本问题不是您想要维护的结构,而是您管理数据流的方式。与其将数据库中的所有数据提取到某个结构中(DataTable
在您的情况下),不如在服务器端stored procedure
进行一些您需要的计算并将已经计算的数据返回给您。通过这种方式,您可以获得几个好处,例如:
编辑
考虑到已编辑的帖子,我会说它DataTable
已经在内存访问方面进行了高度优化,我认为将其更改为其他内容不会给您带来显着的好处。我认为可以带来好处的是对程序流程的修改。换句话说,尝试回答以下问题:
service
我可以在晚上进行一些计算吗?SQL Server Express
(只是示例)并获得运行 a 的可能性的好处,即使在同一台机器上stored procedure
也可以(必须测量)更快地运行这些东西?您是否考虑过在数据的位置进行计算,而不是获取它?您能否向我们提供更多信息,例如它的存储内容以及您如何获取它以及如何处理它。
如果没有指标和背景信息,很难确定优化。
这很容易说 - 是的,将数据放在一个文件中。但是文件是本地的,是网络的问题,你是否充分利用了核心/线程等。
最好从数据开始,看看需要做什么,然后设计最佳优化。
编辑:
好的,所以你在同一台机器上?在这种情况下,您真正应该考虑的一件事是您对数据做了什么。它需要是SQL吗?如果您只是使用是加载数据表?还是您没有披露的复杂性?
I've had a similar task- I just created a large text file and used memory mapping to read is efficicently without any overhead. Is this the kind of thing you're talking about?
You could try using a persisted dictionary like RaptorDB for storing and fetching/manipulating the data in an ArrayList. The proof of concept should not take long to build.