我有一个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
本身将需要大量内存。