生成9万条记录的PDF

3

目前我正在使用LocalReport.Render来创建9万条记录的PDF。使用正常的“for”循环,仅创建PDF需要大约4小时的时间。我尝试了许多选项。

  1. Tried with Parallel. Foreach with and without setting MaxDegreeOfParallelism with different values. There are 2 processors in my system. With setting MaxDegreeOfParallelism(MDP) =4, it is taking the time as normal 'for' loop. I thought increasing MDP to 40 will speed up the process. But didn't get expected results since it took 900 minutes.

  2. Used

    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的进程。更改代码的建议也可以接受。 非常感谢您的帮助。
谢谢

@Matti 感谢您的回复。我需要改变什么来加快这个过程? - user3715379
你需要一台性能强劲的机器,才能真正让它更快。 - Sriram Sakthivel
@Sriram,我目前使用2个处理器和4 GB的RAM。如果我增加处理器,使用for循环还是Parallel.ForEach,这个过程会花费更少的时间呢? - user3715379
@Matti 我没有使用性能分析器。但我没有调用任何数据库,只是纯粹地生成 PDF。 - user3715379
@Matt,由于我正在使用2个处理器,使用Parallel.ForEach时应该给多少计数作为MaxDegreeOfParallelism? - user3715379
显示剩余5条评论
1个回答

1
我不知道任何pdf生成器,所以我只能假设在初始化和完成事务时有很多开销。这是我的做法:
找到一个开源的pdf生成器。
让它生成pdf的几个独立部分-标题,页脚等。
查看代码,找到标题/页脚完成的位置,并尝试绕过它们以重用生成器状态而不必运行整个过程。
尝试从存储的状态和生成器中拼接pdf,仅写入不同的部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接