/ / Wykonywanie zewnętrznego procesu na konkretnym procesorze i oczekiwanie na zakończenie - .net

Wykonywanie zewnętrznego procesu na konkretnym procesorze i oczekiwanie na zakończenie - .net

Szukam wykonania zewnętrznego programu wewnątrz aplikacji .net.

Muszę przypisać konkretny procesor do tego programu. Muszę wykonać program kilka razy i za każdym razem na innym procesorze. Muszę zaczekać na zewnętrzne zakończenie programu.

Aby uprościć, zrobiłem małą aplikację typu spike (konsola) do pracy nad nią:

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();
}
}
}

Moje pytania:
1.- Czy mogę przypisać powinowactwo procesora przed wykonanie procesu.
2.- Na przekór jestem checkin Notepad w menedżerze zadań, wszystkie są przypisane do procesora 0.

Odpowiedzi:

0 dla odpowiedzi № 1

The Process klasa nie obsługuje ustawiania pewnych ustawień przed rozpoczęciem nowego procesu. Natywna CreateProcess API na to pozwala. Będziesz musiał użyć tego.

Rozpocznij proces w stanie zawieszonym. Ustaw wszystkie preferowane ustawienia. Następnie wznów to. W ten sposób cały kod w tym procesie będzie działał pod nowymi ustawieniami.