通过将长时间运行的任务分解为单独的进程来提高程序性能

我读过,当您在单独的线程(并行)中运行长时间运行的操作时,当您的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

回到顶部