我想知道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编写这样的代码是否值得呢?
答案 0 :(得分:1)
我不认为SqlConnection
类是线程安全的,因此您肯定需要为每个任务创建一个单独的SqlConnection
实例。然后我认为它可能会加速数据的加载(但这在很大程度上取决于数据库引擎)。
您在第一个代码段中的评论表明最后一次操作占用了大部分时间。如果这比前两个操作慢得多,则没有必要并行运行三个(因为它不会比运行上一个任务所需的时间更快)。
并行创建三个对象可能更容易,但这取决于您是否在三种方法中进行任何复杂的处理。如果不是,那么我猜测从数据库加载数据可能占用大部分时间。