我有10000條記錄要插入SQLite數據庫使用多線程。使用多線程在SQLite數據庫中插入記錄的性能問題
private void btnThread_Click(object sender, EventArgs e)
{
Thread th1 = new Thread(new ThreadStart(Save1));
Thread th2 = new Thread(new ThreadStart(Save2));
Thread th3 = new Thread(new ThreadStart(Save3));
Thread th4 = new Thread(new ThreadStart(Save4));
Thread th5 = new Thread(new ThreadStart(Save5));
Thread th6 = new Thread(new ThreadStart(Save6));
Thread th7 = new Thread(new ThreadStart(Save7));
Thread th8 = new Thread(new ThreadStart(Save8));
Thread th9 = new Thread(new ThreadStart(Save9));
Thread th10 = new Thread(new ThreadStart(Save10));
th1.Start();
th2.Start();
th3.Start();
th4.Start();
th5.Start();
th6.Start();
th7.Start();
th8.Start();
th9.Start();
th10.Start();
}
在上面的代碼中的每個線程調用一個函數來保存記錄像下面
private void Save1()
{
for(int i = 0; i < 1000; i++)
{
using(SQLiteConnection sqliteConn = new SQLiteConnection("Data Source='" + dbPath + "'"))
{
sqliteConn.Open();
string date = DateTime.Now.ToString();
string sqlInsert = "insert into PatientDetail (Name, Age, Date, PhoneNumber, Email, PatientSex, Status) values ('Patient Name1', 35,'" + date + "','9856235674','[email protected]','M',1)";
SQLiteCommand command = new SQLiteCommand(sqlInsert, sqliteConn);
command.ExecuteNonQuery();
sqliteConn.Close();
}
}
}
在高於邏輯記錄在數據庫正確插入,但它是採取> = 25分鐘到插入10000分的記錄。
當我在一分鐘內檢查了大約300到400條記錄插入。
我也用Transaction
插入記錄,但沒有性能提高
有沒有什麼辦法讓我可以能提高性能?
SQLite
如何在Multithreading
內部工作?
你檢查了這個:https://stackoverflow.com/questions/3852068/sqlite-insert-very-slow? – Piotr
您應該在單個連接和單個事務中執行所有1000次插入,以便事務有任何效果。你是否有理由在多個線程中做這件事?在單個事務中插入所有10000條記錄可能會更快。 –
您是否比較了在單線程中完成此操作所需的時間?併發智能SQLite是多重讀取但是是單寫的。 –