【发布时间】:2016-03-04 18:13:22
【问题描述】:
目前我正在使用 LocalReport。渲染为 90K 记录创建 PDF。使用普通的“for”循环,仅创建 PDF 大约需要 4 小时。我尝试了很多选择。
尝试并行。 Foreach 设置和不设置 MaxDegreeOfParallelism 具有不同的值。我的系统中有 2 个处理器。设置 MaxDegreeOfParallelism(MDP) =4,它会像正常的“for”循环一样花费时间。我认为将 MDP 增加到 40 会加快这个过程。但是因为耗时 900 分钟,所以没有得到预期的结果。
-
二手
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 感谢您的回复。我需要改变什么来加快这个过程?
-
你需要一台功能强大的机器才能真正让它更快。
-
@userrandomnumbers:你确定这代是 CPU 绑定的吗?你用过分析器吗?如果大部分时间都花在等待数据库或硬盘响应上,那么使用多线程将无济于事。
-
@Sriram 我目前正在使用 2 个处理器和 4 GB RAM。如果我增加处理器,使用 for 循环或使用 Parallel.ForEach 的过程会花费更少的时间吗?
标签: c# multithreading task-parallel-library multitasking parallel.foreach