Вставка большого числа строк в SQL CE 4.0 с Entity Framework 4 (проблема с производительностью)

У меня есть небольшая база данных 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 мс на строку .

  • Является ли 40 мс нормальным (средним) временем для вставки строки через EF4?

Я проверил другой свой код (кроме добавления в базу данных и сохранения изменений). Всего на все 12600 строк требуется 100 мс. Это 0,01% полного времени, так что проблема, очевидно, не в этом. 99,99% времени обработки тратится на EF4 AddObject и SaveChanges .

Я также знаю, что устанавливаю свойство ItemID, которое является внешним ключом. Это целое число, поэтому я думаю, это не имеет большого значения. Но я бы не знал.

Также обратите внимание: не установлены индексы ни для одной из таблиц (кроме первичных / внешних ключей)

  • Что я здесь делаю не так, почему это так медленно?
  • Это нормальное время, необходимое для вставки такого количества строк, или это какие-то ограничения производительности, связанные с SQL CE 4?
8
задан Kornelije Petak 11 August 2011 в 14:31
поделиться