我有一個小程序,我試圖提高性能。該程序非常簡單,主要基於一個遞歸函數。然而,它背後的數據集非常大 - 需要大約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);
}
}
正如你可以看到函數的每次運行並不需要很長時間來運行,所以創建的成本每個遞歸的線程都不值得。遞歸的每一個分支都可以有不同的長度,不知道每個分支將會有多長時間,所以在特定級別的線程化並不是正確的方法。
有沒有人有任何建議?
使用'Parallel.For *' – SLaks