У меня есть небольшая база данных SQL CE 4.0 с несколькими таблицами, отображенными с помощью Entity Framework 4.
Вот код, который у меня есть
foreach (String designation in newItemDesignations)
{
ParameterData defaultValue = PDM.GetDefaultParameterData(designation);
// Fill the ItemParameterDBO object with the data
ItemParameterDBO dbParam = new ItemParameterDBO();
dbParam.ItemID = dbItem.ID;
dbParam.Designation = designation;
dbParam.High = defaultValue.High;
dbParam.Low = defaultValue.Low;
database.ItemParameterDBOes.AddObject(dbParam);
}
database.SaveChanges();
Этот код встречается 24 раза
] и каждый раз список newItemDesignations
содержит ровно 525 элементов
. Всего нужно добавить 12600 строк
Полный процесс длится 509 секунд
. Думаю, это слишком много для 12600
строк.
Мне известно, что я звоню SaveChanges 24 раза
. На данный момент дизайн приложения не позволяет мне помещать все вставки в одну транзакцию (с SaveChanges
). Однако посмотрите, что происходит с одной транзакцией. 509/24 = 21 секунда
, или 40 мс на строку
.
Я проверил другой свой код (кроме добавления в базу данных и сохранения изменений). Всего на все 12600 строк требуется 100 мс. Это 0,01% полного времени, так что проблема, очевидно, не в этом. 99,99% времени обработки тратится на EF4 AddObject
и SaveChanges
.
Я также знаю, что устанавливаю свойство ItemID, которое является внешним ключом. Это целое число, поэтому я думаю, это не имеет большого значения. Но я бы не знал.
Также обратите внимание: не установлены индексы ни для одной из таблиц (кроме первичных / внешних ключей)