gpt4 book ai didi

c# - 运行 CPU/内存密集型任务 - 哪种编码方法性能最高?

转载 作者:太空狗 更新时间:2023-10-29 23:25:39 25 4
gpt4 key购买 nike

众所周知,在软件开发中,我们可能会被问到与技术相关的非常雄心勃勃的事情。

最近我被问及将 4000 份文档从 word 转换为 pdf 的最快方法。进行转换的代码/软件已经到位,并且它在专用服务器上运行,因此硬件也在那里(这是一项重复性任务)。但从 C# 性能的角度来看,执行此操作的最佳方法是什么?

我一直在考虑将其分解成 block (即 40 个文档)并转换它们(即 40 个唯一文档 x 1000 个并行任务),它们同时运行。这是正确的想法,性能明智吗?最简单(也是最长)的是遍历每个文档的串行循环。

你会推荐什么?没有语言限制,因此 C# 4.0、LINQ 等都可用。

最佳答案

1000 个并行任务?您想并发运行 1,000 个线程?与实际工作相比,您将花费更多的时间切换线程。如果您有一台四核机器,您应该运行四个线程,每个线程一次转换一个文档。

可能最好的开始方式是使用一个简单的Parallel.ForEach,让运行时库负责调度任务。像这样的东西:

List<string> DocumentsToConvert = new List<string>();
// here, load the file names of all the documents you want to convert.
// Then, process them with:
Parallel.Foreach(DocumentsToConvert, (doc) => { ConvertDocument(doc); });

您可以对 TPL 和任务执行相同类型的操作:

foreach (var doc in DocumentsToConvert)
{
// Create and start a task to convert that document
}

无论哪种情况,您都让运行时库计算出要并行执行的任务数。

关于c# - 运行 CPU/内存密集型任务 - 哪种编码方法性能最高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com