Я предполагаю, что это база данных SQL.
Вероятно, ваша проблема в том, что вы делаете по одному предмету за раз. SQL ненавидит это. Базы данных SQL и SQL работают с наборами элементов.
Итак, откройте транзакцию, прочитайте и вставьте 1000 элементов. Сохраните эти элементы на случай, если транзакция по какой-либо причине не удалась, чтобы вы могли повторить попытку.
Мне удалось ускорить некоторые сценарии Perl, выполняющие работу, которая звучит похоже на ваше описание более чем в 20 раз с помощью этой техники.
Я не знаю библиотеку Microsoft, которую вы используете, но вот пример на Perl с использованием DBI. Части, которые заставляют это работать, являются AutoCommit => 0 и $ dbh-> commit.
#!/usr/bin/perl
use strict;
use DBI;
my $dbname = 'urls';
my $user = 'postgres';
my $pass = '';
my $dbh = DBI->connect(
"DBI:Pg:dbname=$dbname",
$user,
$pass,
{ 'RaiseError' => 1, AutoCommit => 0 }
);
my $insert = $dbh->prepare('
INSERT INTO todo (domain, path)
VALUES (?, ?)
');
my $count = 0;
while(<>) {
if( $count++ % 1000 == 0) {
$dbh->commit;
}
chomp;
my ($one, $two) = split;
$insert->execute($one, $two);
}
$dbh->commit;
$dbh->disconnect;