【发布时间】:2013-01-04 17:48:47
【问题描述】:
我有一个小程序正在尝试提高其性能。该程序非常简单,主要基于单个递归函数。然而,它背后的数据集非常大 - 需要大约 6,000,000,000 次递归,运行大约需要 4-6 小时,具体取决于机器。没有只处理数据的 I/O,我花了很多时间优化代码并设法找到了大约 60% 的改进。
我现在想看的是多线程代码,以便它利用主机中的所有内核。但是,我尝试过使用线程、任务和 Parellel 库的一些部分,但我找不到任何不会以负面方式影响性能的东西。
为了让您了解我正在查看的代码类型:
class Program
{
static void Main(string[] args)
{
RecursiveFunction(0);
Console.ReadLine();
}
static void RecursiveFunction(int currentLevel)
{
DoWork(currentLevel);
if (currentLevel < 1000)
for (int i = 0; i < (currentLevel % 6) + 1; i++)
RecursiveFunction(currentLevel + 1);
}
static void DoWork(int currentLevel)
{
Thread.Sleep(42);
}
}
正如您所见,函数的每次运行都不会花费很长时间,因此为每次递归创建线程的成本是不值得的。递归的每个分支都可以有不同的长度,无法知道每个分支将有多长,因此在特定级别进行线程不是正确的方法。
有人有什么建议吗?
【问题讨论】:
标签: .net multithreading .net-4.0 task-parallel-library