webForumDet fria alternativet

Sätta prioritit på ett program

.NET

4 svar · 1 080 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Hej, jag försöker att sätta prioritet på ett program, men det lyckas inget vidare.

//lokala variabler
public string processEmpire = "Empire.exe*32";
public string processNapolion = "Napolion.exe*32";

private void button1_Click(object sender, EventArgs e)
        {//Starta vallt spel
            string gGame = "";
            string processName = "";
                if (comboBox1.Text == "empire total war")
                {
                    gGame =gameEmpire + "\\Empire.exe";
                    processName = processEmpire;
                }
                else if (comboBox1.Text == "napoleon total war")
                {
                    gGame = gameNapoleon + "\\Napoleon.exe";
                    processName = processNapolion;
                }
            lInfo.Text = comboBox1.Text + " is starting";
            Application.DoEvents();
            Process proc = new Process();
            proc.StartInfo.FileName = gGame;
            proc.StartInfo.Arguments = "";
            proc.Start();
            System.Threading.Thread.Sleep(500); 
            setPriority(processName);
        }

private void setPriority(string prossName)
        {
            Process[] processes = Process.GetProcessesByName(prossName);
            foreach (Process process in processes)
            {
                process.PriorityClass = ProcessPriorityClass.RealTime;
            }
        }

Jag får inga fel, men ingenting händer. Nu när jag testar så är det satt till RealTime, men tanken är att man skall kunna ändra även detta.

Väldigt tacksam för hjälp. :stud

Medlem sedan juni 201161 inlägg
#2

För det första, undvik att sätta RealTime på saker och ting. Det ger en alldeles för hög trådprioritet för de flesta normala program.

För det andra, varför sätter du inte bara proc.PriorityClass innan du startar processen? Eller efter för den delen? Varför leta efter ett hårdkodat namn? Du har ju redan en referens till den nya processen.

Medlem sedan mars 20011 880 inlägg
#3

Tack för ditt svar. Jag trodde att jag var tvungen att leta rätt på namnet innan jag gav prioritet.
Orsaken för detta är jag startar ett spel och då ville jag ge högsta prioritet.
Om jag använder mig av proc.PriorityClass hur kan jag då säga att jag vill ha högre prioritet?

Medlem sedan juni 201161 inlägg
#4
proc.PriorityClass = ProcessPriorityClass.High;

till exempel.

Men jag är osäker på om du egentligen förstår vad PriorityClass innebär, så låt mig försöka sammanfatta det kort.

Varje tråd har en trådprioritet mellan 0 och 31. När en given tråd har kört slut på sin time-slice (eller hamnar i en kernel-wait), måste den lämna över CPU:n till nästa tråd på kön. Denna kö består av trådar som är redo att köra och är sorterad efter trådprioritet. Om det inte finns någon annan tråd som är redo att köra, kommer den avlämnande tråden att få tillbaka CPU:n och fortsätta.

Varje tråd hör till en process som har en Prioritetsklass. Trådens trådprioritet kan avvika maximalt 2 enheter från Prioritetsklassens numeriska värde. Så om processen har Priority Class = Normal (8), har dess trådar minimum 6 och maximum 10 i trådprioritet.

Så min följdfråga är ju varför du vill ändra Priority Class för ett spel? Om det inte har hård konkurrens av andra processers trådar, så kommer det inte gå snabbare bara för det. Vad vill du ha ut av prioritetsändringen?

P.S. Ja, det finns en massa annat jox med detta också, t ex Dynamic Boost, men jag ville hålla det enkelt.

Medlem sedan mars 20011 880 inlägg
#5

Tack för utförlig kommentar. Jag trodde att jag hadde någonting på gång här, men efter din förklaring så tror jag nog att jag överger den tanken.

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)