我编写了一个小程序,可以将一堆文件转换为 pdf。
该程序执行以下操作:
- 从文件夹中获取
FileInfo
对象数组(10,000 个文档) - 对于每个
FileInfo
- 使用
FileInfo.CopyTo()
创建备份副本, - 使用一些 Aspose 库将文档转换为 PDF
- 转换后,将 PDF 复制到新目标
- 在 foreach 内部,WinForm UI 会引发并处理一个事件,以显示一些进度
- 使用
根据文档的大小,文档的转换可能需要 0-3 秒。 我认为这将是 Parallel.ForEach 的完美候选者,因此我修改了程序。
但是,转换花费了 1 个小时,而使用 Parallel.Foreach
则需要 1.5 个小时(我尝试过的服务器有 2 个 Intel Xeon Procs)。
我做错了什么或者我需要考虑什么才能获得更好的性能?
最佳答案
我建议通过查看任务管理器中的 CPU 和资源监视器中的磁盘 I/O 响应时间/队列长度和/或查看各种可用的性能计数器来检查您的操作是否受 CPU 限制或 I/O 限制。
我怀疑您的问题很可能是您现在同时执行多个文件副本(既用于创建备份又用于写入转换后的文件)。与随机访问相比,硬盘的顺序访问(如果一次仅写入/读取一个文件)要快得多。
关于c# - Parallel.ForEach 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249356/