我正在创建一个Windows控制台应用程序,它将逐行读取文本文件,并从固定长度数据的字符串中提取数据。该应用程序目前被编写为Windows应用程序,但稍后将转换为Windows控制台应用程序。我注意到,应用程序要花一些时间才能从阅读文本,插入数据库以及从数据库导出的过程中运行。
如果我使用多个线程,是否可以帮助加快进程?我正在考虑一个线程读取数据,而另一个线程将数据插入数据库。
有什么建议吗?
编辑:该应用程序将在VB.net中完成
最佳答案
我将假定这是一个SQL数据库。
您的问题可能是您一次只做一项。 SQL讨厌那样。 SQL和SQL数据库对项的集进行操作。
因此,打开一个事务,读取并插入1,000个项目。保存这些项目,以防事务提交由于某种原因而失败,以便您可以重试。
通过这种技术,我设法加快了一些Perl脚本的执行速度,使它们听起来与您的描述相似,超过了20倍。
我不知道您使用的Microsoft库,但这是使用DBI的Perl中的示例。使它起作用的部分是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;
关于multithreading - 是否多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744352/