SubSonic AddMany () против цикла foreach Add () - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь выяснить, является ли метод 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 Ответ

0 голосов
/ 04 февраля 2012

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

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

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

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

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

...