Я проверил, сохранив 10000 записей и получив 10000 записей. Все в новых проектах. Никаких дополнительных кодов.
EF Core 2.2.6 : Сохранить 10000 записей: 1414.1892мс. Получить 10 000 записей: 0 0003 мс.
EF Core 3.1.1 : сохранить 10 000 записей: 5029,9279 мс. Получить 10000 записей: 0,0069 мс.
Dapper : сохранить 10 000 записей: 4782,7224 мс. Извлечение 10000 записей: 12.2705 мс.
EF Core 2.2.6 и 3.1.1 Код
Stopwatch sw = new Stopwatch();
sw.Start();
List<User> list = new List<User>();
for (int i = 0; i <= 10000; i++)
{
User user = new User()
{
Name = $"User {i}",
Age = i + 1
};
list.Add(user);
}
TestDBContext db = new TestDBContext();
db.AddRange(list);
db.SaveChanges();
sw.Stop();
TimeSpan ts = sw.Elapsed;
string s1 = ts.TotalMilliseconds.ToString();
sw.Restart();
sw.Start();
var s = db.User;
sw.Stop();
ts = sw.Elapsed;
string s2 = ts.TotalMilliseconds.ToString();
Код Dapper
Stopwatch sw = new Stopwatch();
sw.Start();
List<User> list = new List<User>();
using (var db = new SqlConnection("Server=SQLEXPRESS;Database=TestDB;Trusted_Connection=true;"))
{
for (int i = 0; i <= 10000; i++)
{
string query = $"insert into [User] (Name, Age) values ('User {i}', {i + 1})";
db.Query<User>(query);
}
}
sw.Stop();
TimeSpan ts = sw.Elapsed;
string s1 = ts.TotalMilliseconds.ToString();
sw.Restart();
sw.Start();
using (var db = new SqlConnection("Server=SQLEXPRESS;Database=TestDB;Trusted_Connection=true;"))
{
string query = "select * from [User]";
var s = db.Query<User>(query);
}
sw.Stop();
ts = sw.Elapsed;
string s2 = ts.TotalMilliseconds.ToString();
ИЗД.
Используется EFCore.BulkExtensions для EFCore. Используется SqlBulkCopy для Dapper. Запустите снова 3 раза.
EF Core 2.2.6 Выполнение 1: Сохранение 10 000 записей: 108.1211 Извлечение 10 000 записей: 0,001
EF Core 2.2.6 Запуск 2: Сохранение 10 000 записей: 75,7498 Извлечение 10 000 записей: 0 0007
EF Core 2.2.6 Прогон 3: Сохранение 10 000 записей: 49,9556 Извлечение 10 000 записей: 0 0007
EF Core 3.1.1 Прогон 1: Сохранение 10000 записей: 320,7665. Получить 10 000 записей: 0,001.
EF Core 3.1.1 Прогон 2: Сохранить 10000 записей: 67,0531. Получить 10 000 записей: 0,001.
EF Core 3.1.1 Прогон 3: Сохранить 10000 записей: 71,3584. Извлечь 10 000 записей: 0,0018.
Dapper Run 1: Сохранить 10000 записей: 99,0564. Получить 10 000 записей: 8,2078.
Dapper Run 2: Сохранить 10000 записей: 36,2659. Получить 10 000 записей: 10.0161.
Dapper Run 3 Сохранить 10000 записей: 36.8418. Получить 10 000 записей: 10,6243.