En mi sistema, ~ 86000 inserciones SQLite tomaron hasta 20 minutos, significa ~ 70 inserciones por segundo. Tengo que hacer millones, ¿cómo puedo acelerarlo? ¿Llamar a Open() y Close() en el objeto SQLiteConnection para cada línea puede ralentizar el rendimiento? ¿Pueden las transacciones ayudar?SQLite .NET rendimiento, ¿cómo acelerar las cosas?
método de inserción típica para una sola línea:
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;
}
Como se puede ver, las inserciones son muy simples.
No entiendo el punto n. ° 2, ¿me lo puede explicar? – gremo
@Gremo, lo he editado para mostrar un ejemplo. – mikel
No puedo, simplemente porque el ciclo está en otra clase ... ¿qué hay de implementar IDisposable y comprometer la transacción en Dispose()? – gremo