我正在执行CMSTransactionScope
中包含的数据导入。
如果出现任何错误,并行导入数据和回滚最有效和最实用的方法是什么?我看到的问题是,如果它是并行的,我不知道如果它们是新线程的一部分,我是否可以将插入的对象作为事务的一部分。
有没有办法做到这一点,还是应该以不同方式处理?
答案 0 :(得分:1)
如果你为了获得更好的性能而并行运行代码并且你基本上是逐行插入行,那么它不太可能比在单个线程中运行时更好地执行。
在这种情况下,我建议将一个主题与CMSTransactionScope
结合使用,并可能ConnectionHelper.BulkInsert
。
无论如何,如果您仍然想要并行运行查询,那么您需要实现某种同步(例如锁定)以确保在代码命中CMSTransactionScope.Commit()
之前执行所有语句(这基本上意味着性能损失)。否则,查询将在单独的事务中执行。此外,您必须确保CMSTransactionScope
对象始终使用相同的IDataConnection
进行实例化(默认情况下,如果未将连接传递给构造函数,则会发生这种情况)。
第二种方法似乎容易出错,我宁愿看看优化代码的不同方法(使用异步等)。