我有一个SQLite数据库问题。

我有一个包含600万行的表。

当我执行Select * from that_table时,我可以在Widows Task Manager中看到内存使用量大量增加。
这使我的应用程序崩溃。

我在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)和测量该点的传感器。

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

最佳答案

问题不在于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本身将需要大量内存。

07-24 09:26