选择SQLite表的多行时应用程序崩溃

时间:2013-11-01 10:50:40

标签: sql sqlite memory crash

我的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万个ChartObjects。 ChartObject用于包含1个测量点,x值,y值,校准y值(ValueY2)和测量点的传感器。

我使用此列表在图表上绘制数据。

1 个答案:

答案 0 :(得分:1)

问题不在于sqlite,而在于您使用结果集的方式。如果您需要从表格中的每一行创建一个新的ChartObject,请按以下方式迭代它们:

foreach (var myrow in (from x in that_table select x))
{
    var myChartObject = new ChartObject();
    // populate myChartObject fields from myrow
    // add myChartObject to the actual chart
}

如果你错误地在Linq查询上调用ToList(),你将不必要地将所有这些行加载到内存中。如果您不需要同时在内存中的行,则可以避免这种情况。请记住,200万ChartObjects将需要大量的内存。