最佳选择线程化方法

时间:2019-07-17 12:15:54

标签: c# sql multithreading parallel-processing

我有一个场景:我需要比较两个数据库之间的350个表。因此,我们遵循的过程是:

1。在sql中创建350个临时表 2.从数据库中插入数据 3.最后比较每个临时表并找出差异。

以这种方式: 我们正在使用一个线程,一直等待到步骤1的结尾。 然后下一个线程将一直等待到2结束。

所以它花费了太多时间。有什么方法可以做,例如创建一个表加载数据,并行创建第二个表并加载数据,就像不等到最后一样。

更新:这是我的示例代码:

foreach (var bpr in tableDetails)
            {
                var tableName = bpr.TableName;
                ComparisonDataLoadLoadWorkerID(comparisonID, sourceEnvId, targetEnvId, tableName);//creating table and loading from DBs
            }

在这里浏览每个表并创建和加载数据。在加载完整表数据之后,然后进行比较。所以我需要等到上述foreach结束。我期望的是,如果第一个表正在创建加载数据,并且并行发生第二个表的创建和数据加载。因此,无需等到每个表加载结束。 预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

出于这个问题,您可以尝试创建类似(用伪代码)的内容:

var t = new Task(() => /* code that creates the temp table */ );
var last = t
           .continueWith (p => /* code that inserts the data into it */ )
           .continueWith (p => /* code that compares the data */ );
t.Start();

然后,您可以循环访问所有350个表。

这将实现一些并行性,但是请记住,瓶颈将是SqlServer,所以不要指望产生巨大的影响。