3

當前我正在使用LocalReport。渲染爲90K記錄創建PDF。使用普通的'for'循環,僅需要大約4個小時來創建PDF。我嘗試了很多選擇。爲90K記錄生成PDF

  1. 試過並行。帶有和不帶有MaxDegreeOfParallelism並設置不同值的Foreach。我的系統中有2個處理器。通過設置MaxDegreeOfParallelism(MDP)= 4,它爲'循環'節省了時間。我認爲將MDP提高到40將加快這一進程。但花了900分鐘纔得到預期的結果。

  2. 二手

    var list=List<Thread()>; 
    foreach (var record in records) { 
        var thread = new Thread (=> GeneratePDF()); 
        thread.Start(); 
        list.Add(thread); 
    } 
    foreach(var listThreads in thread){ 
        listThreads. Join(); 
    

    }

我使用的代碼以上那樣。但它最終創造了太多的線程,花了更長的時間。

我需要使用Parallel的幫助。 Foreach加速爲90K記錄創建PDF的過程。改變代碼的建議也是可以接受的。 任何幫助將不勝感激。

感謝

+0

運行更多的線程通常比運行內核時多。上下文切換最終會讓它變慢。 –

+0

@Matti感謝您的回覆。我需要改變以加速這個過程? – user3715379

+0

你需要一臺功能強大的機器來加快速度。 –

回答

1

我不知道任何PDF生成器,所以我只能假設存在初始化和最後確定的事情很多開銷。這就是我要做的:

找到一個開源的pdf生成器。

讓它生成一個PDF的幾個獨立的部分 - 頁眉,頁腳等

挖的代碼,以查找在頁眉/頁腳完成並試圖解決它們的重用發電機狀態,而無需通過運行整個過程。

嘗試從存儲狀態和生成器只寫入不同部分的stich在一起。