0

我的 SQLite 数据库有问题。

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

当我执行时,Select * from that_table我可以在寡妇任务管理器中看到内存使用量大幅增加。这使我的应用程序崩溃。

我在 Firefox 中有一个用于 SQLite 的管理工具插件。当我执行相同的查询时,此工具也会崩溃。

有没有办法选择这么多行而不会崩溃?

我猜 600 万行并没有那么多 - SQLite 不应该能够处理吗?

该应用程序是用 C# 编写的。数据来自传感器并存储在类型列表中ChartObjectChartObject是一个有 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)和测量该点的传感器。

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

4

1 回答 1

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
}

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

于 2013-11-01T12:54:09.403 回答