Я ценю, что этот вопрос уже поднимался пару раз, но я не могу найти однозначного ответа (возможно, его нет!).
В любом случае название говорит обо всем на самом деле. Создайте новый контекст, добавьте новый объект, 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.0002ms (0.0040002s)
Запрос 3 = 14.0008 мс (0.0140008 с)
SaveChanges 3 = 3.0002ms (0.0030002s)
Запрос 4 = 13 000 8 мс (0,013 000 8 с)
SaveChanges 4 = 3.0002ms (0.0030002s)
Запрос 5 = 10.0005мс (0.0100005с)
SaveChanges 5 = 3.0002ms (0.0030002s)
Первый запрос занимает время, которое, как я полагаю, является генерацией представления? Или дб соединение?
Первое сохранение занимает около 4 секунд, что для более сложного сохранения в моем приложении занимает более 20 секунд, что недопустимо.
Не уверен, куда идти с этим сейчас: - (
UPDATE ...
SQL Profiler показывает, что первый запрос и обновление выполняются быстро и не отличаются для первого. Итак, я знаю, что задержка - это Entity Framework, как и предполагалось.