我有一个JSON文件,包含~25-30K项目,我想保存在sqlite数据库中。 但是,对于15K项,SQLiteDataAdapter类使用包含所有项的DataTable对象更新数据库所花费的时间大约为35分钟。 执行更新的性能受到UpdateBatchSize的限制,在我的情况下为1,当我尝试更改它时,我会收到一个异常,说明"不支持指定的方法"。
以下是更新方法:
public async Task<bool> SaveTable()
{
SQLiteDataAdapter data_adapter = null;
try
{
data_adapter = new SQLiteDataAdapter(sql_cmd);
data_adapter.UpdateBatchSize = 10;
}
catch (Exception e)
{
Console.WriteLine("Exception Thrown: " + e.Message);
return false;
}
try
{
SQLiteCommandBuilder cmd_bldr = new SQLiteCommandBuilder(data_adapter);
data_adapter.InsertCommand = cmd_bldr.GetInsertCommand();
Console.WriteLine(data_adapter.InsertCommand.CommandText);
data_adapter.AcceptChangesDuringUpdate = true;
data_adapter.UpdateCommand = data_adapter.InsertCommand;
}
catch (Exception e)
{
Console.WriteLine("Exception Thrown: " + e.Message);
return false;
}
try
{
var size = data_adapter.UpdateBatchSize;
Console.WriteLine("Updating Table. Batch Size: " + size);
var rows_updated = data_adapter.Update(data_table);
Console.WriteLine("Rows Updated: " + rows_updated.ToString());
data_adapter.Dispose();
}
catch(Exception e)
{
Console.WriteLine("Exception Thrown: " + e.Message);
return false;
}
return true;
}
有没有办法可以更改UpdateBatchSize或每秒增加更新次数?
答案 0 :(得分:1)
我认为您使用SQLiteDataAdapter的方法是错误的。 UpdateBatchSize属性未由SQLite连接器实现,因此无法更改。默认值1表示禁用更新批处理功能。因此,当请求更新时,适配器被强制一行一行地进行慢速运行。
最好的方法是手动执行每个插入命令,但将它们包含在事务中
group_concat()