我有一个场景:我需要比较两个数据库之间的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结束。我期望的是,如果第一个表正在创建加载数据,并且并行发生第二个表的创建和数据加载。因此,无需等到每个表加载结束。 预先感谢您的帮助。
答案 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,所以不要指望产生巨大的影响。