好吧,我有一个file.sql包含20,000插入命令
样本来自.sql文件
插入
table值(1,-400,400,3,154850,'Text',590628,'TEXT',1610,'TEXT',79);INSERT INTO
tableVALUES(39,-362,400,3,111659,'Text',74896,'TEXT',0,'TEXT',14);
我使用以下代码创建一个内存Sqlite数据库并将值拉入其中,然后计算经过的时间
using (var conn = new SQLiteConnection(@"Data Source=:memory:"))
{
conn.Open();
var stopwatch = new Stopwatch();
stopwatch.Start();
using (var cmd = new SQLiteCommand(conn))
{
using (var transaction = conn.BeginTransaction())
{
cmd.CommandText = File.ReadAllText(@"file.sql");
cmd.ExecuteNonQuery();
transaction.Commit();
}
}
var timeelapsed = stopwatch.Elapsed.TotalSeconds <= 60
? stopwatch.Elapsed.TotalSeconds + " seconds"
: Math.Round(stopwatch.Elapsed.TotalSeconds/60) + " minutes";
MessageBox.Show(string.Format("Time elapsed {0}", timeelapsed));
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情
SQLite Manager来测试减速问题是否来自脚本; 但是,我感到惊讶的是20,000,我尝试使用我的代码处理的相同行已经在4月4日被拉到了数据库!PRAGMA synchronous = OFF,以及PRAGMA journal_mode =
MEMORY.begin transaction;并commit transaction;在开始和结束的.sql分别文件.正如SQLite文档所说:SQLite能够50,000每秒处理命令.这是真实的,我确定它使用SQLite Manager[在我被试过的第三个描述中描述]; 但是,我20,000在4分钟内完成了我的命令,这些事情表明存在错误.
问题:我面临的问题是什么执行非常缓慢?
SQLite.Net 文档推荐以下事务构造
using (SqliteConnection conn = new SqliteConnection(@"Data Source=:memory:"))
{
conn.Open();
using(SqliteTransaction trans = conn.BeginTransaction())
{
using (SqliteCommand cmd = new SQLiteCommand(conn))
{
cmd.CommandText = File.ReadAllText(@"file.sql");
cmd.ExecuteNonQuery();
}
trans.Commit();
}
con.Close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2274 次 |
| 最近记录: |