내 코드에 문제가 있습니다. 프로세스를 가속화하기 위해 작업을 사용하는 MySQL 데이터베이스 테이블에 약 100.000 개의 항목을 삽입하려고합니다. 난 내 코드를 실행하면작업으로 MySQL에 100.000 항목 삽입 - C#
List <Task> tasks = new List <Task>();
int counter = 0;
foreach(var folder in dirs) {
object lockTarget = new object();
tasks.Add(Task.Factory.StartNew(() => {
try {
comm.CommandText = "INSERT INTO webdata(url,title) VALUES(?sUrl,?sTitle,) ON DUPLICATE KEY UPDATE url=?sUrl,title=?sTitle";
comm.Parameters.Add("?sUrl", MySql.Data.MySqlClient.MySqlDbType.VarChar).Value = url;
comm.Parameters.Add("?sTitle", MySql.Data.MySqlClient.MySqlDbType.VarChar).Value = title;
var mysql_return = comm.ExecuteNonQueryAsync();
lock(lockTarget) {
counter++;
Console.WriteLine("\rProcessing {0} of {1} - {2} {3}", counter, dirs.Length, folder, mysql_return.Status);
}
} catch (MySql.Data.MySqlClient.MySqlException ex) {
Console.WriteLine(ex.Message);
}
}));
}
Task.Factory.StartNew(() => {
Task.WaitAll(tasks.ToArray());
Console.WriteLine("Finished");
conn.Close();
});
그래서, 작업 (mysql_return)의 일부는 따라서 단지 1/2 내 항목이 실제로 DB에 삽입 rantocompletion
일부 Faulted
를 반환하는 : 여기 내 코드입니다.
ExecuteNonQuery
과 Task
을 사용할 수 있지만 너무 많은 데이터를 삽입하는 데 시간이 오래 걸릴 수 있습니다. 하드웨어 (CPU가 수천 개의 생성 된 작업을 처리하지 못함) 또는 코드 때문에 문제가 있습니까?
아이디어가 있으십니까? 미리 감사드립니다.
:
그래서 당신의 코드는 다음과 같이 될 것이다? http://stackoverflow.com/questions/5526917/how-to-do-a-batch-insert-in-mysql – sed