我的 Windows 服务正在读取 100 个文件,每个文件中有数千条记录,并使用线程插入到 Sql 服务器



我的Windows服务正在读取100个文件,每个文件中有数千条记录,并使用线程插入Sql服务器。目前我是如何使用Threads来实现这一点的。我正在运行4个线程,每个Thread将选择一个文件并处理,直到文件结束,然后我将所有读取的记录插入数据库。然后此线程将拾取新的未处理文件。所有4个线程的行为都相同。但这个过程需要很长时间。

有没有更好的方法来实现这一点。

我需要比现在更快地完成这个操作。

如果您只是导入数据,那么最好执行BULK INSERT。

此外,如果您有多个线程同时从同一个磁盘读取,那么您的程序可能会比单线程运行时慢。如果每条记录的处理时间非常短,则情况尤其如此。你最好只使用两个线程,像这样。

while not end of input
{
read a batch of records from the disk
wait for pending asynchronous SQL insert operation to complete
start asynchronous SQL insert operation with
}

因此,当一个线程插入记录时,主线程正在从磁盘中读取下一批记录。

如果有多个线程从磁盘中读取,那么这些线程将花费大量时间在硬件上等待。磁盘一次只能做一件事,并且磁盘查找不是空闲的。此外,根据数据库服务器的不同,在多个线程执行插入操作时,它的执行速度可能比在单个线程执行插入时慢。

实际上,如果插入只是磁盘文件的导入,那么BULK insert几乎肯定会比C#程序执行得更快。

最新更新