Я понимаю, что этот вопрос поднимался несколько раз раньше, но я не могу найти однозначного ответа (возможно, его нет!).
Во всяком случае, название действительно все говорит. Создайте новый контекст, добавьте новую сущность, SaveChanges () займет 20 секунд. Добавьте вторую сущность в том же контексте, SaveChanges () мгновенно.
Есть мысли по этому поводу? :-)
============ ОБНОВЛЕНИЕ =============
Я создал очень простое приложение, работающее с моей существующей моделью, чтобы показать проблему ...
public void Go()
{
ModelContainer context = new ModelContainer(DbHelper.GenerateConnectionString());
for (int i = 1; i <= 5; i++)
{
DateTime start = DateTime.Now;
Order order = context.Orders.Single(c => c.Reference == "AA05056");
DateTime end = DateTime.Now;
double millisecs = (end - start).TotalMilliseconds;
Console.WriteLine("Query " + i + " = " + millisecs + "ms (" + millisecs / 1000 + "s)");
start = DateTime.Now;
order.Note = start.ToLongTimeString();
context.SaveChanges();
end = DateTime.Now;
millisecs = (end - start).TotalMilliseconds;
Console.WriteLine("SaveChanges " + i + " = " + millisecs + "ms (" + millisecs / 1000 + "s)");
Thread.Sleep(1000);
}
Console.ReadKey();
}
Пожалуйста, не комментируйте мой код - если это не недействительный тест;)
Результаты следующие:
Запрос 1 = 3999,2288 мс (3,9992288 с)
SaveChanges 1 = 3391,194 мс (3,391194 с)
Запрос 2 = 18,001 мс (0,018001 с)
SaveChanges 2 = 4,0002 мс (0,0040002 с)
Запрос 3 = 14,0008 мс (0,0140008 с)
SaveChanges 3 = 3 0002 мс (0,0030002 с)
Запрос 4 = 13,0008 мс (0,0130008 с)
SaveChanges 4 = 3 0002 мс (0,0030002 с)
Запрос 5 = 10,0005 мс (0,0100005 с)
SaveChanges 5 = 3 0002 мс (0,0030002 с)
Первый запрос требует времени, которое, как я полагаю, является генерацией представления? Или подключение к БД?
Первое сохранение занимает почти 4 секунды, что для более сложного сохранения в моем приложении занимает более 20 секунд, что неприемлемо.
Не уверен, что теперь с этим делать :-(
ОБНОВИТЬ...
SQL Profiler показывает, что первый запрос и обновление выполняются быстро и не отличаются от первого. Итак, я знаю, что задержка - это подозрение на Entity Framework.