Я вставляю большое количество записей с помощью LinqToSql из C # в SqlServer 2008 Express DB. Похоже, вставка выполняется очень медленно. Ниже приведен фрагмент кода.
public void InsertData(int id)
{
MyDataContext dc = new MyDataContext();
List- result = GetItems(id);
foreach (var item in result)
{
DbItem dbItem = new DbItem(){ItemNo = item.No, ItemName=item.Name};
dc.Items.InsertOnSubmit();
}
dc.SubmitChanges();
}
Am Я делаю что-то не так? Или использование Linq для вставки большого количества записей - плохой выбор?
Обновление: Спасибо за все ответы. Похоже прошивка в этом очень медленная. Ниже приведен фрагмент кода. public void InsertData (int ...
Я вставляю большое количество записей с помощью LinqToSql из C # в SqlServer 2008 Express DB. Похоже, вставка выполняется очень медленно. Ниже приведен фрагмент кода.
public void InsertData(int id)
{
MyDataContext dc = new MyDataContext();
List- result = GetItems(id);
foreach (var item in result)
{
DbItem dbItem = new DbItem(){ItemNo = item.No, ItemName=item.Name};
dc.Items.InsertOnSubmit();
}
dc.SubmitChanges();
}
Am Я делаю что-то не так? Или использование Linq для вставки большого количества записей - плохой выбор?
Обновление: Спасибо за все ответы. Похоже прошивка в этом очень медленная. Ниже приведен фрагмент кода. public void InsertData (int ...
Я вставляю большое количество записей с помощью LinqToSql из C # в SqlServer 2008 Express DB. Похоже, вставка выполняется очень медленно. Ниже приведен фрагмент кода.
public void InsertData(int id)
{
MyDataContext dc = new MyDataContext();
List- result = GetItems(id);
foreach (var item in result)
{
DbItem dbItem = new DbItem(){ItemNo = item.No, ItemName=item.Name};
dc.Items.InsertOnSubmit();
}
dc.SubmitChanges();
}
Am Я делаю что-то не так? Или использование Linq для вставки большого количества записей - плохой выбор?
Обновление: Спасибо за все ответы. @ p.campbell: Извините за количество записей, это была опечатка, на самом деле это около 100000. Записи также варьируются до 200k.
В соответствии со всеми предложениями, я разделил эту операцию на части (также изменение требований и проектное решение) и извлечение данных небольшими порциями и вставку их в базу данных по мере их поступления. Я поместил этот метод InsertData () в операцию потока и теперь использую SmartThreadPool для создания пула из 25 потоков для выполнения той же операции. В этом сценарии я вставляю за раз только 100 записей. Теперь, когда я попробовал это с Linq или sql-запросом, это не имело никакого значения с точки зрения затраченного времени.
Согласно моему требованию, эта операция запланирована на выполнение каждый час и извлекает записи примерно для 4-6 тысяч пользователей. Итак, теперь я m объединяет каждую операцию с пользовательскими данными (получение и вставку в БД) как одну задачу и назначается одному потоку. Теперь весь этот процесс занимает около 45 минут и составляет около 250 тыс. Записей.
Есть ли лучший способ выполнить такую задачу? Или кто-нибудь может подсказать мне, как я могу улучшить этот процесс?