通过将长时间运行的任务分解为单独的进程来提高程序性能
我读过,当您在单独的线程(并行)中运行长时间运行的操作时,当您的PC具有多个处理器内核时,性能将有显着改善。在C#中有一个函数Parallel.ForEach
,我的理解是,它在每个处理器核心上运行的独立线程中拆分长时间运行的操作。尽管如果只有一个内核,该函数将作为简单的Foreach
循环(同步)运行。另外,如果您创建的线程多于处理器内核,则可能会产生负面影响。通过将长时间运行的任务分解为单独的进程来提高程序性能
我正在考虑创建一个单独的控制台应用程序,将args
传递给它并在多个进程(如start -WindowStyle Hidden SeparateProcess.exe
)上运行它的.exe。
编辑:
我已经创造了这样的
class Program {
static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(200);
Console.WriteLine("" + i);
}
Console.WriteLine();
Console.WriteLine(Guid.NewGuid() + ": Process finalized.");
}
}
一个控制台应用程序,然后,使用PowerShell执行了很多次:
For ($i=0; $i -lt 10; $i++){ start -WindowStyle Normal SeparateProcess.exe
}
这是否会提高程序的性能在单跑核心?
注:长时间运行的任务是Emgu CV图像计算算法。
回答:
你应该尝试它检查自己,但是......
是否有提高长期运行的任务性能,即使只有一个核心的方法吗?
是的,但显然不是通过并行运行。你可以在代码中使用性能分析器来找出哪些部分花费的时间最多,并尝试以更优化的方式重写它。
编辑基于评论:
如果你正在尝试做的图像处理与CV和你正在做的事情是CPU绑定(马克塞斯同时运行的处理器),然后并行它是不会以帮助单核(他们将相互竞争CPU)。
如果你正在做的事情必须等待I/O完成,那么并行化它将允许一些工作继续进行,而其他进程则等待I/O。
这取决于你在做什么 - 你应该关闭这个问题并且询问一个更具体的问题,详细说明你想要做什么以及这个任务的CPU密集程度如何。 (顺便说一句,如果可以的话,一种使图像处理更快的方法是事先调整图像的大小 - 你可能试图用图像处理较小版本的很多事情 - 例如:人脸检测)。
以上是 通过将长时间运行的任务分解为单独的进程来提高程序性能 的全部内容, 来源链接: utcz.com/qa/266241.html