マルチスレッドを使用してSQLiteデータベースに挿入するレコードが10000件あります。上記のコードではマルチスレッドを使用して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();
}
}
}
以下のようなレコードを保存するための関数を呼び出すが、それは10000件のレコードを挿入するために> = 25分を取ることでした。
1分で300~400個のレコードをチェックしたところ、
私はまた、レコードを挿入するTransaction
を使用しますが、何のパフォーマンス改善
は、私はパフォーマンスを改善することができることにより、どのような方法はありますか?
SQLite
は内部でどのように動作するのですかMultithreading
?
これをチェックしましたか:https://stackoverflow.com/questions/3852068/sqlite-insert-very-slow? – Piotr
トランザクションが何らかの影響を及ぼすためには、単一の接続と単一のトランザクションで1000個の挿入をすべて実行する必要があります。複数のスレッドでこれをやっている理由はありますか?単一のトランザクションにすべての10000レコードを挿入する方が早いでしょう。 –
これは、これが1つのスレッドでこれを行うのにかかる時間と比較しましたか?同時実行性SQLiteは複数読み込みですがシングル書き込みです。 –