Возможный дубликат:
производительность SQL Server CE 4.0 сравнение
Я оцениваю, использовать ли SQL Server CE 4 или SQLite в качестве локального кеша для настольного приложения. Я провел простой тест, чтобы увидеть, как они поведут себя под давлением, поскольку скорость очень важна для приложения. Тест состоял из вывода случайных данных в таблицу ниже, а затем их запроса — цикл 500 раз.
CREATE TABLE [Lines] (
[KeyHash] NVARCHAR(4000) NOT NULL,
[Method] NVARCHAR(100) NOT NULL,
[Value] TEXT NOT NULL,
[AddedOn] TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,
Primary Key ([KeyHash], [Method])
)
Код для вставки данных был довольно простым.
using (var conn = GetConnection()) {
using (var cmd = conn.CreateCommand()) {
cmd.CommandText = "INSERT INTO Lines(KeyHash, Method, Value) VALUES (@KeyHash, @Method, @Value)";
PopulateWithRandom(cmd);
cmd.ExecuteNonQuery();
}
}
Код для запроса данных тоже был довольно простым.
using (var conn = GetConnection()) {
using (var cmd = conn.CreateCommand()) {
cmd.CommandText = "SELECT Value FROM Lines WHERE KeyHash=@KeyHash AND Method=@Method";
cmd.Parameters.AddWithValue("@KeyHash", key);
cmd.Parameters.AddWithValue("@Method", method);
return (string) cmd.ExecuteScalar();
}
}
Результаты были какие-то сумасшедшие. SQL Server CE завершил работу за 18 секунд, а SQLite — за 4,7 секунды.
Я упустил что-то простое или SQLite намного быстрее?
P.S. Полные результаты:
SQL Server CE 4
Total: 18032 milliseconds
Insert: 10069 milliseconds
Query: 6940 milliseconds
SQLite
Total: 4739 milliseconds
Insert: 3248 milliseconds
Query: 496 milliseconds
Я не должен открывать и закрывать соединение (например, используя конструкцию using
) при каждой операции.