我有一个小程序,我正在尝试提高其性能。该程序非常简单,主要基于单个递归函数。然而,它背后的数据集非常大 - 需要大约 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);
}
}
如您所见,函数的每次运行都不会花费很长时间,因此为每次递归创建线程的成本是不值得的。递归的每个分支都可以有不同的长度,而无法知道每个分支将有多长,因此在特定级别的线程不是正确的方法。
有没有人有什么建议?