Поскольку вы уже позаботились о пакетном коммите, следующая проблема будет заключаться в передаче туда и обратно к клиенту.Чем меньше запросов, тем лучше.Таким образом, первые два варианта были бы довольно плохими, так как каждый отправляет по одной строке на запрос и должен обходить 250 000 раз.Вариант 3 является жизнеспособным, особенно если обработка XML ориентирована на наборы (спроецируйте XML в таблицу с помощью метода .nodes () и вставьте всю проецируемую таблицу).См. Также Как сериализовать большой граф объекта .NET в BLOB-объект SQL Server без создания большого буфера , чтобы узнать, как отправить большой XML-код в SQL без огромных выделений памяти на клиенте.
Другой вариант, который вы не упомянули, но уже указали: используйте SqlBulkCopy .Это будет самый быстрый путь по многим причинам.Единственное, что нужно, это то, что вы должны вынести способ представления строк, которые будут массово скопированы, используя потоковую семантику usign (возвращать IEnumerable), чтобы избежать больших выделений памяти у клиента.