我正在寻找在。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确实允许这样做。你必须用那个。
以挂起状态启动进程。设置所有你喜欢的设置。然后,重新开始。这样,该进程中的所有代码都将在新设置下运行。