В моей системе ~ 86000 вставок SQLite заняли до 20 минут, значит ~ 70 вставок в секунду. Я должен делать миллионы, как я могу ускорить его? Вызов Open() и Close() объекта SQLiteConnection для каждой строки может замедлить производительность? Могут ли транзакции помочь?Производительность SQLite .NET, как ускорить работу?
Типичный метод вставки для одной строки:
public int InsertResultItem(string runTag, int topicId,
string documentNumber, int rank, double score)
{
// Apre la connessione e imposta il comando
connection.Open();
command.CommandText = "INSERT OR IGNORE INTO Result "
+ "(RunTag, TopicId, DocumentNumber, Rank, Score) " +
"VALUES (@RunTag, @TopicId, @DocumentNumber, @Rank, @Score)";
// Imposta i parametri
command.Parameters.AddWithValue("@RunTag", runTag);
command.Parameters.AddWithValue("@TopicId", topicId);
command.Parameters.AddWithValue("@DocumentNumber", documentNumber);
command.Parameters.AddWithValue("@Rank", rank);
command.Parameters.AddWithValue("@Score", score);
// Ottieni il risultato e chiudi la connessione
int retval = command.ExecuteNonQuery();
connection.Close();
return retval;
}
Как вы можете видеть, Вставки очень простые.
Как в InsertResultItem кажется, что он будет вызываться в цикле, это все равно открывает новое соединение, начиная новую транзакцию и делая новую команду для каждой вставки. Скорость будет такой же, как и в коде OP. – mikel 2010-12-04 23:47:20
@ miket2e, это не открывает новое соединение, ADO.NET использует пул соединений. Также начинается новая транзакция, что ускоряет работу. – 2010-12-04 23:48:35