应该创建多少个任务来并行化独立的不同数据库调用?

时间:2016-05-14 17:54:55

标签: c# multithreading linq task-parallel-library task

我需要独立执行5个并行数据库操作。我知道询问核心数量并创建4或8(在4或8核心中)任务将是昂贵的。

DB Op result1 = db.Table1.Get(...)。Join(anotherTable2)... Join()..

DB Op result2 = db.Table1.Get(...)。Join(anotherTable2)... Join()..

DB Op result3 = db.Table1.Get(...)。Join(anotherTable2)... Join()..

DB Op result4 = db.Table1.Get(...)。Join(anotherTable2)... Join()..

DB Op result5 = db.Table1.Get(...)。Join(anotherTable2)... Join()..

关于这些行动的结果,我必须决定是否应该继续下去。

为此,几个任务就足够了,它们会调用DB来执行这些操作,还是应该创建5个不同的任务?我没有内部任务创建执行某些数据库操作的线程数。

我不考虑并行化查询本身。

1 个答案:

答案 0 :(得分:1)

  

应创建多少个任务来并行化独立的不同数据库   呼叫?

尽可能多的独立数据库操作。

错误的问题。

真正的问题是 - 应该同时执行多少次。这意味着制作自己的限制调度程序(从互联网复制/粘贴)。您可以从https://msdn.microsoft.com/en-us/library/ee789351(v=vs.100).aspx开始 - “如何:创建限制并发度的任务计划程序”

这可能是试验和错误,因为它取决于数据库服务器的负载和特性,而不是运行代码的计算机。上次我这样做是为了简单的操作(不是很多连接)和Oracle ExaData,我们在应用程序中并行使用了数百个线程(比核心更多,因为它们主要是等待数据库服务器)。 C#端无法知道db服务器何时重载,因此我们将它们作为配置值并进行了一些试运行以查找调度程序的良好值。