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在一起。