Как правильно InsertAllOnSubmit () и это лучше, чем зацикливание InsertOnSubmit ()? - PullRequest
8 голосов
/ 23 ноября 2011

Скажи, что у меня есть:

using (SomeDataContext db = new SomeDataContext())
{

     foreach(Item i in Items)
     {
          DbItem d = new DbItem;
          d.value = i.value;
          //.... etc ...

          db.InsertOnSubmit(d);
     }

     db.SubmitChanges();
}

Можно и / или лучше (хуже?) Сделать:

using (SomeDataContext db = new SomeDataContext())
{
     IEnumerable<DbItem> dbItems = //???? possible?

     foreach(Item i in Items)
     {
          DbItem d = new DbItem;
          d.value = i.value;
          //.... etc ...

          dbItems.Add(d); // ???? again, somehow possible?
     }

     db.InsertAllOnSubmit(dbItems);
     db.SubmitChanges();
}

Ответы [ 3 ]

13 голосов
/ 23 ноября 2011

Ну, вы могли бы использовать List<T>:

using (SomeDataContext db = new SomeDataContext())
{
     List<DbItem> dbItems = new List<DbItem>();

     foreach(Item i in Items)
     {
          DbItem d = new DbItem;
          d.value = i.value;
          //.... etc ...

          dbItems.Add(d);
     }

     db.InsertAllOnSubmit(dbItems);
     db.SubmitChanges();
}

Будет ли это более эффективным или нет, я не знаю.

3 голосов
/ 23 ноября 2011

Вы не увидите здесь никакого улучшения производительности, потому что ничего не произойдет, пока вы не позвоните SubmitChanges().

Но даже если бы ты делал что-то ужасное

foreach(Item i in Items)      
{           
    DbItem d = new DbItem;           
    d.value = i.value;           
    //.... etc ...            
    db.InsertOnSubmit(d);      
    db.SubmitChanges();
}       

Я бы не ожидал значительного снижения производительности. Это потому, что LINQ-to-SQL делает единственные вставки.

Даже если вы используете InsertAllOnSubmit, вы все равно увидите отдельную команду SQL для каждой вставляемой строки .

2 голосов
/ 23 ноября 2011

Не говоря о том, что это лучше или хуже, но в любое время вы можете сделать один вызов базы данных вместо вызова базы данных в цикле, вы увидите увеличение производительности. Теперь то, что .SubmitChanges() делает за сценой, находится вне нашего контроля.

...