濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQLite速度評測代碼

SQLite速度評測代碼

熱門標簽:電話機器人錄音師薪資 江西穩(wěn)定外呼系統(tǒng)供應商 中國地圖標注省份用什么符號 北京智能外呼系統(tǒng)供應商家 孝感銷售電銷機器人廠家 無錫梁溪公司怎樣申請400電話 高德地圖標注電話怎么沒了 奧維地圖標注字體大小修改 智能電銷機器人教育

今天有個朋友測試 SQLite,然后得出的結論是:SQLite 效率太低,批量插入1000條記錄,居然耗時 2 分鐘!
下面是他發(fā)給我的測試代碼。我暈~~~~~~

using System.Data;
using System.Data.Common;
using System.Data.SQLite;

// 創(chuàng)建數(shù)據(jù)庫文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");

DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 連接數(shù)據(jù)庫
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();

// 創(chuàng)建數(shù)據(jù)表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();

// 添加參數(shù)
cmd.Parameters.Add(cmd.CreateParameter());

// 開始計時
Stopwatch watch = new Stopwatch();
watch.Start();

// 連續(xù)插入1000條記錄
for (int i = 0; i 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();

cmd.ExecuteNonQuery();
}

// 停止計時
watch.Stop();
Console.WriteLine(watch.Elapsed);
}

哎~~~~ 一個常識性的錯誤,我加幾行代碼 (新增代碼標記 "http:// -------------------")。

using System.Data;
using System.Data.Common;
using System.Data.SQLite;

// 創(chuàng)建數(shù)據(jù)庫文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");

DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 連接數(shù)據(jù)庫
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();

// 創(chuàng)建數(shù)據(jù)表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();

// 添加參數(shù)
cmd.Parameters.Add(cmd.CreateParameter());

// 開始計時
Stopwatch watch = new Stopwatch();
watch.Start();

DbTransaction trans = conn.BeginTransaction(); // -------------------
try
{
// 連續(xù)插入1000條記錄
for (int i = 0; i 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();

cmd.ExecuteNonQuery();
}

trans.Commit(); // -------------------
}
catch
{
trans.Rollback(); // -------------------
throw; // -------------------
}

// 停止計時
watch.Stop();
Console.WriteLine(watch.Elapsed);
}

執(zhí)行一下,耗時 0.2 秒。這差距是不是太大了點?

為什么只是簡單啟用了一個事務會有這么大的差距呢?很簡單,SQLite 缺省為每個操作啟動一個事務,那么原代碼 1000 次插入起碼開啟了 1000 個事務,"事務開啟 + SQL 執(zhí)行 + 事務關閉" 自然耗費了大量的時間,這也是后面顯示啟動事務后為什么如此快的原因。其實這是數(shù)據(jù)庫操作的基本常識,大家要緊記,不好的代碼效率差的不是一點半點。

標簽:齊齊哈爾 臨滄 泰州 阜陽 通化 荊州 那曲 海北

巨人網絡通訊聲明:本文標題《SQLite速度評測代碼》,本文關鍵詞  SQLite,速度,評測,代碼,SQLite,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLite速度評測代碼》相關的同類信息!
  • 本頁收集關于SQLite速度評測代碼的相關信息資訊供網民參考!
  • 推薦文章
    内丘县| 昌宁县| 揭西县| 隆化县| 辽中县| 扶余县| 侯马市| 河池市| 莱西市| 蚌埠市| 东乡族自治县| 岐山县| 始兴县| 大名县| 子长县| 渭南市| 安庆市| 汤阴县| 视频| 忻州市| 宜城市| 宜宾市| 凤山市| 额尔古纳市| 婺源县| 衡南县| 灌阳县| 营山县| 光山县| 新泰市| 浦东新区| 泰兴市| 景宁| 大关县| 漳平市| 涞水县| 仲巴县| 东安县| 吉隆县| 佛教| 客服|