【发布时间】:2013-11-12 13:38:24
【问题描述】:
我的 SQLite 数据库有问题。
我有一个包含 600 万行的表。
当我执行Select * from that_table 时,我可以在 Widows 任务管理器中看到内存使用量大幅增加。
这使我的应用程序崩溃。
我在 Firefox 中有一个用于 SQLite 的管理工具插件。当我执行相同的查询时,此工具也会崩溃。
有没有办法选择这么多行而不会崩溃?
我猜 600 万行不算多 - SQLite 不应该能够处理吗?
应用程序是用 C# 编写的。数据来自传感器并存储在ChartObject 类型的列表中。 ChartObject 是一个有 6 个属性的结构体:
public struct ChartObject
{
public ISensor Sensor { get; set; }
public DateTime Category { get; set; }
public double ValueX { get; set; }
public double? ValueY { get; set; }
public double? ValueY2 { get; set; }
public string Tooltip { get; set; }
}
此列表包含多达 200 万个 ChartObject。 ChartObject 用于包含 1 个测量点、x 值、y 值、校准的 y 值(ValueY2)和测量该点的传感器。
我使用这个列表在图表上绘制数据。
【问题讨论】:
-
取决于每行的大小以及您对选择结果的处理方式。您是否需要同时将它们全部存储在内存中,还是可以遍历行?
-
我需要它们同时在内存中。
-
不,对不起,我使用限制为 2.000.000 的循环缓冲区。所以我从不在内存中存储超过 200 万行数据。
-
这仍然可能是大量内存,具体取决于行的大小。你确定你需要它们在内存中吗?无论您对它们进行什么处理,您可以将其中的一部分放在
select中,以便 sqlite 为您完成一些工作并返回一个较小的结果集吗? -
所以我会在几个选择语句中选择数据块?