在具体处理器上执行外部进程并等待终止



我正在寻找在。net应用程序内执行外部程序。

我需要给这个程序分配一个具体的处理器。我需要执行程序几次,每次在不同的处理器上。我需要等待外部程序终止。

为了简化,我做了一个小spike(控制台)应用程序来处理它:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
    namespace ExecuteExternalInParallelWithAffinity
    {
        class Program
        {
            static void Main(string[] args)
            {
                for (int i = 1; i < 3; i++)
                {
                    var processnumber = i;
                    Task.Factory.StartNew(() =>
                        {                        
                            Process p = Process.Start("notepad.exe");                       
                            p.ProcessorAffinity = (IntPtr)processnumber;
                        }).ContinueWith(t => 
                        {
                            Console.Out.WriteLine(string.Format("Process ended on processor: {0}", processnumber));
                        });
                }
                Console.ReadKey();
            }
        }
    }

我的问题:
1.—是否可以在执行进程之前分配处理器亲和性 ?
2.-尽管我在任务管理器上签入Notepad,但它们都被分配给处理器0。

Process类不支持在新进程启动前设置某些设置。原生CreateProcess API确实允许这样做。你必须用那个。

以挂起状态启动进程。设置所有你喜欢的设置。然后,重新开始。这样,该进程中的所有代码都将在新设置下运行。

最新更新