AsParallel与经典的ADO.NET

时间:2010-10-01 15:01:55

标签: c# .net ado.net parallel-processing

我想知道AsParallel使用是否会以我们使用它的方式加速我的代码。

我在这里写了一些非常简化的伪代码,以说明我的想法:

让我们说3 SqlCommand在同一SqlConnection之下(伪代码):

RunADOQueryForRequest() // returns one row
RunADOQueryForRequestAnswer() // returns about 100 rows
RunADOQueryForOtherStuff() // returns about 1000 rows (slow query)

然后创建3个包含所有数据的对象列表(DTO):

MakeRequest()
MakeRequestAnswers()
MakeOtherStuffList()

如果我将该代码作为并行运行(3个并行任务),它会改善性能吗?

我知道有很多if和whens。但是为Parallel编写这样的代码是否值得呢?

1 个答案:

答案 0 :(得分:1)

我不认为SqlConnection类是线程安全的,因此您肯定需要为每个任务创建一个单独的SqlConnection实例。然后我认为它可能会加速数据的加载(但这在很大程度上取决于数据库引擎)。

您在第一个代码段中的评论表明最后一次操作占用了大部分时间。如果这比前两个操作慢得多,则没有必要并行运行三个(因为它不会比运行上一个任务所需的时间更快)。

并行创建三个对象可能更容易,但这取决于您是否在三种方法中进行任何复杂的处理。如果不是,那么我猜测从数据库加载数据可能占用大部分时间。