C# SQLite,读取和解析相当大的数据量

C# SQLite,读取和解析相当大的数据量,c#,sqlite,gtfs,C#,Sqlite,Gtfs,我从一个相当大的SQlite表中读取两倍的纬度和经度。使用外部工具DB Browser for Sqlite,查询需要200毫秒才能执行200多万个结果。然而,在我的代码中,同样的查询大约需要8-10秒。下面是使用Sytem.Data.Sqlite的代码C: string sql = "SELECT shape_pt_lat, shape_pt_lon FROM shape"; List<double> lats = new List<double>(); List<

我从一个相当大的SQlite表中读取两倍的纬度和经度。使用外部工具DB Browser for Sqlite,查询需要200毫秒才能执行200多万个结果。然而,在我的代码中,同样的查询大约需要8-10秒。下面是使用Sytem.Data.Sqlite的代码C:

string sql = "SELECT shape_pt_lat, shape_pt_lon FROM shape";
List<double> lats = new List<double>();
List<double> lons = new List<double>();
using (var command = _connection.CreateCommand())
{
    command.CommandText = sql;
    SQLiteDataReader r = command.ExecuteReader();
    while(r.Read())
    {
        lats.Add(r.GetDouble(1));
        lons.Add(r.GetDouble(2));
    }
}    

我意识到解析double可能需要很多时间,但我编写了一个示例应用程序,它能够在600ms内解析400万个double。我愿意接受任何加快这一进程的建议,并且可以考虑并行处理吗?谢谢您的建议。

我想这不会有多大帮助,但您可以为列表设置初始大小。它将大大减少数组分配的数量。在大型对象堆上分配是昂贵的,所以你最好只做一次。没有添加调用的情况下分配的速度有多快?好问题,没有添加调用的情况下只需要一秒钟多。有没有办法一次将所有数据读入一个数组,然后并行解析记录?@JurySoldatenkov我会试试,这样可以稍微改善一些。