Очень медленный процесс вставки с использованием Linq to Sql

Я вставляю большое количество записей с помощью 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 тыс. Записей.

Есть ли лучший способ выполнить такую ​​задачу? Или кто-нибудь может подсказать мне, как я могу улучшить этот процесс?

9
задан JPReddy 22 September 2010 в 05:31
поделиться