SQLite数据库与C#执行非常缓慢

我有我的sqlite数据库存储在C:\program-name\db\db.s3db。 我有一个表members与约70记录。所以现在有一个我必须做的程序,它将所有账号从members表复制到另一个表act_monthly_listings。SQLite数据库与C#执行非常缓慢

它显示它正在执行,但它的速度很慢。我不知道是否因为我的代码。这里是一个片段:

连接:

private void SetConnection() 

{

sql_con = new SQLiteConnection

("Data Source=C:\\credit-union\\db\\cu.s3db;Version=3;New=False;Compress=True;");

}

在ButtonClick代码:

private void button1_Click(object sender, EventArgs e) 

{

button1.Text = "Working Please Wait";

string init_month = dtInit.Value.Month.ToString();

string init_yr = dtInit.Value.Month.ToString();

SetConnection();

sql_con.Open();

SQLiteCommand cmd = new SQLiteCommand();

cmd.CommandText = "select ec_no from members";

cmd.Connection = sql_con;

DR = cmd.ExecuteReader();

int count = 0;

while (DR.Read())

{

DR.Read();

this.Text = "Account : " + DR.GetInt32(0).ToString();

string SQL = "INSERT INTO act_monthly_listings (year,month,act) VALUES ("+ init_yr + "," + init_month + "," + DR.GetInt32(0).ToString() + ")";

//Clipboard.SetText(SQL)

if (ExecuteQuery(SQL))

{

count++;

}

}

if(count > 0){

MessageBox.Show("Accounts Initialized!", "Success", MessageBoxButtons.OK,MessageBoxIcon.Information);

}else{

MessageBox.Show("Initialization Failed!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

sql_con.Close();

}

回答:

那是因为while您正在执行insert查询等于行数,使您的程序运行速度很慢所以这最好用 INSERT INTO-SELECT like:

 string init_month = dtInit.Value.Month.ToString(); 

string init_yr = dtInit.Value.Month.ToString();

SQLiteCommand cmd = new SQLiteCommand();

cmd.CommandText = "INSERT INTO act_monthly_listings (year,month,act) select @y,@m,ec_no from members";

cmd.Parameters.Add(new SQLiteParameter("@y", init_yr));

cmd.Parameters.Add(new SQLiteParameter("@m", init_month));

cmd.Connection = sql_con;

cmd.ExecuteNonQuery();

所有行插入一个拍摄,当您使用while直到reader.Read()指针抵达最后一排的DataReader与DB连接(需活着连接),可能使连接池慢,再加上你正在执行每Read避免查询这个, 假设你有一百万条记录,那么你的代码发生了什么?

以上是 SQLite数据库与C#执行非常缓慢 的全部内容, 来源链接: utcz.com/qa/265219.html

回到顶部