婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

SQLite速度評測代碼

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

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

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

// 創建數據庫文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");

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

// 創建數據表
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();

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

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

// 連續插入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;

// 創建數據庫文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");

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

// 創建數據表
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();

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

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

DbTransaction trans = conn.BeginTransaction(); // -------------------
try
{
// 連續插入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);
}

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

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

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

巨人網絡通訊聲明:本文標題《SQLite速度評測代碼》,本文關鍵詞  SQLite,速度,評測,代碼,SQLite,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLite速度評測代碼》相關的同類信息!
  • 本頁收集關于SQLite速度評測代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 张家川| 松原市| 东兴市| 启东市| 光泽县| 游戏| 广河县| 衡阳县| 辉南县| 赤壁市| 西青区| 宾川县| 丰都县| 特克斯县| 隆子县| 永城市| 康定县| 佳木斯市| 斗六市| 平凉市| 松江区| 枝江市| 什邡市| 博兴县| 深水埗区| 苍溪县| 岳西县| 南澳县| 定襄县| 湖北省| 辽阳市| 加查县| 潞城市| 宾川县| 页游| 金秀| 伊金霍洛旗| 旺苍县| 监利县| 石家庄市| 若尔盖县|