SubSonic AddMany() против цикла foreach Add()

Я пытаюсь выяснить, является ли метод SubSonics AddMany() быстрее, чем простой цикл foreach. Я немного покопался на сайте SubSonic, но мало что видел по статистике производительности.

Что у меня сейчас есть. (.ForEach() просто имеет некоторую проверку, если не считать, что он работает так же, как forEach(.....){ do stuff})

records.ForEach(record =>
            {
                newRepository.Add(record);
                recordsProcessed++;
                if (cleanUp) oldRepository.Delete<T>(record);
            });

Что тоже изменится

newRepository.AddMany(records);
if (cleanUp) oldRepository.DeleteMany<T>(records);    

Если вы заметите, что с помощью этого метода я потеряю счет того, сколько записей я обработал, что не критично... Но было бы неплохо показать пользователю, сколько записей было перемещено с помощью этого инструмента.

Поэтому мои вопросы сводятся к следующему: будет ли AddMany () заметно быстрее в использовании? И есть ли способ подсчитать количество фактически скопированных записей? Если это удастся, могу ли я предположить, что все записи были обработаны? Если одна запись терпит неудачу, весь процесс терпит неудачу?

Заранее спасибо.

1 ответ

Просто чтобы уточнить, AddMany() генерирует отдельные запросы для каждой строки и отправляет их через пакет; DeleteMany() генерирует один запрос. Пожалуйста, обратитесь к исходному коду и сгенерированному SQL, если вы хотите знать, что происходит с вашими запросами.

Ваш первый подход медленный: 2*N запросов. Однако, если вы отправляете запросы с использованием пакета, это будет быстрее.

Ваш второй подход быстрее: N+1 запросов. Вы можете узнать, сколько будет добавлено, просто перечислив "записи".

Если существует риск превышения пределов емкости по размеру партии, то подайте 50 или 100 за один раз с небольшим штрафом.

Ваш последний вопрос зависит от транзакций. Если вся операция является одной транзакцией, она будет фиксироваться как одна. В противном случае каждый запрос будет автономным. Твой выбор.

Другие вопросы по тегам