Forza C # applicazione per utilizzare un singolo core in un PC con un processore multicore

StackOverflow https://stackoverflow.com/questions/3429999

  •  26-09-2019
  •  | 
  •  

Domanda

Ciao ragazzi a questa domanda potrebbe sembrare strano, ma sto utilizzando il lettore Haptek persone Mastice per la mia C # e ho visto la gente dice nei forum che non funziona bene con un processore multicore. La mia applicazione funziona bene sul mio portatile Core 2 Duo, ma in ritardo rispetto molto quando provo in esecuzione su un desktop Quad Core. Stavo pensando di indagare su questo per me e in quel caso, avrei dovuto forzare la mia applicazione per funzionare su un singolo core. Che è possibile in C #? Grazie!

È stato utile?

Soluzione

Quando un Process variabile proc tiene il processo che ti interessano (Process.GetCurrentProcess() per il processo di esecuzione, ottenendo da GetProcesses() o GetProcessesByName() ecc per un altro processo Quindi:.

foreach(ProcessThread pt in proc.Threads)
{
   pt.IdealProcessor = 0;
   pt.ProcessorAffinity = (IntPtr)1;
}

IdealProcessor è un'identità base zero di un singolo nucleo. ProcessorAffinity è una maschera di bit, in modo da 1 consente di zero nucleo, 2 permette un core, 3 consente nuclei zero e uno, 4 permette nucleo due, e così via.

ho iniziato ad esaminare questo a fondo . Le probabilità sono molto forti che questo sarà realmente danneggiare le prestazioni, nel ridurre la capacità di fare uso di diversi nuclei, che è dopo tutto generalmente un vantaggio.

Altri suggerimenti

Se l'applicazione è a thread singolo, esso non sfruttare più core. Tuttavia, è possibile che il kernel può urtare il filo attorno tra i core. Dubito che questa sia la causa dei vostri problemi di prestazioni.

Se volete legare il basso filo ad un singolo core (non so se questo può essere garantita), si potrebbe voler controllare la proprietà System.Diagnostics.ProcessThread.ProcessorAffinity, anche se non ho mai usato io.

  • Non è davvero possibile in C #. Bene, nessun modo ne so off. Avete bisogno di interoperabilità, con che funziona.

  • Si sta utilizzando più thread? In caso contrario - hm - mi dispiace - non molto si può fare. applicazioni standard di interfaccia utente non si utilizza più core in ogni caso.

In sostanza, le applicazioni non utilizzano Fili (elementi di lavoro presentano filettature) sono intrinsecamente unipolari comunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top