multithreading - 是否多线程

标签 multithreading performance

我正在创建一个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/

相关文章:

c++ - 这段代码对 C++ 是线程安全的吗

c++ - 使这个 UDP 监听套接字成为非阻塞的,我是否有可能搬起石头砸自己的脚?

android - 我应该在添加到 ImageView 之前调整位图的大小还是让 ImageView 调整位图的大小?

javascript - 在 iPad 上使用 touchmove 移动图像(css3 变换)

oracle - Oracle中使用临时表优化SQL

java - 理解java中的死锁

Java:将 put() 与对象列表同步

c# - 从工作线程调用 UI 线程时出现死锁

java - JVM什么时候考虑代码进行字节码优化?

python - 在递归函数中将巨大的列表作为参数传递时的性能?