我的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)和测量点的传感器。
我使用此列表在图表上绘制数据。
答案 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
将需要大量的内存。