Как всегда - зависит .
В ваших примерах первый блок кода запускает хранимые процедуры и представляет изменения для каждого объекта в отдельных транзакциях.
Второй блок кода, однако, выполняет хранимые процедуры ... и затем фиксирует все изменения за один раз, за одну транзакцию.
Это может быть более эффективным, в зависимости от вашего приложения.
Лучше всего, если вы можете, это уменьшить количество вызовов базы данных. Поэтому, если вы можете переработать хранимую процедуру, чтобы взять список имен, а не одно имя, а затем выполнить цикл на сервере базы данных, вы, скорее всего, увидите значительное улучшение производительности.
Обратите внимание, что на практике обычно небольшие издержки связаны с открытием и закрытием соединений, поскольку они обычно кэшируются в пуле соединений. Итак, производительность
using(var connection = new LinqToSqlDBContext())
{
foreach(var obj in MyObjects)
{
connection.StoredProc1(obj.Name);
connection.StoredProc2(obj.Name);
}
}
и
foreach(var obj in MyObjects)
{
using(var connection = new LinqToSqlDBContext())
{
connection.StoredProc1(obj.Name);
connection.StoredProc2(obj.Name);
}
}
, скорее всего, будет очень похоже.