2010-08-07 12 views
7

Ciao ragazzi questa domanda potrebbe sembrare strana, ma sto usando il lettore Haptek People Putty per la mia applicazione C# e ho visto persone dire nei forum che non funziona bene con un processore multicore. La mia applicazione funziona bene sul mio portatile Core 2 Duo, ma è molto più lunga quando provo a farla girare su un desktop Quad Core. Stavo pensando di indagare su questo per me stesso e in tal caso, dovrei costringere la mia applicazione a funzionare su un singolo core. È possibile in C#? Grazie!Applicazione Force C# per utilizzare un singolo core in un PC con un processore multicore

+1

possibile duplicato di [Come impostare l'affinità del processore da File batch per Windows XP? ] (http://stackoverflow.com/questions/827754/how-to-set-process-affinity-from-batch-file-for-windows-xp) –

+0

Hmm anche se non è lo stesso identico problema, ma potrei usare quella come soluzione. Probabilmente dovrò creare un file batch per la mia applicazione invece di eseguirlo direttamente. Proverò a vedere se funziona domani. Grazie per il link Hans. – Paul

risposta

3

Dove una variabile Processproc tiene il processo che ti interessano (Process.GetCurrentProcess() per il processo in esecuzione, ottenendo da GetProcesses() o GetProcessesByName() ecc per un altro processo Poi:.

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

IdealProcessor è un'identità a base zero di un core singolo, ProcessorAffinity è una maschera di bit, quindi 1 consente il core zero, 2 consente il core uno, 3 consente i core zero e uno, 4 consente il core due, e così via

Vorrei testare questo completamente. È molto probabile che ciò possa effettivamente danneggiare le tue prestazioni, riducendo la possibilità di utilizzare diversi core, il che è generalmente un vantaggio dopo tutto.

+0

Grazie Jon! Ho anche provato a farlo ieri e ha funzionato per la mia applicazione. Hai ragione che ostacolerà le prestazioni ma è l'unico modo in cui potrei forzare People Putty a funzionare :(In realtà il programma funziona con processori dual core, ma da quando l'ho eseguito su un quad core è rallentato davvero. fino a 2, sembra funzionare abbastanza bene. – Paul

+0

@akim Questa modifica non ha senso, poiché in questo caso si riferirebbe al processo corrente che è contrario alla domanda. –

+0

@JonHanna, lo snippet corrente non verrà compilato. e fa in modo che solo il primo thread venga eseguito su un singolo processo, ma non su tutti i thread. – Akim

1
  • Non proprio possibile IN C#. Beh, non lo so. Hai bisogno di interoperabilità, con ciò funziona.

  • Stai utilizzando più thread? Se no - hm - scusa - non molto che puoi fare. Le applicazioni UI standard non utilizzano comunque più core.

In sostanza, le applicazioni che non utilizzano Thread (gli elementi di lavoro utilizzano thread) sono intrinsecamente single core.

+0

La mia applicazione non utilizza più thread. Il lettore di Haptek People Putty ha appena fornito una DLL, quindi non so cosa faccia dentro. Non so se hanno più thread o cosa no. Immagino che il problema rimarrebbe lì dato che non ho accesso al loro codice :( – Paul

+0

Sarei d'accordo su quello potrebbe essere l'hosting di loro Stai dichiarando STA Threading come fanno i modelli VS? – TomTom

+0

Yup giusto – Paul

2

Se l'applicazione è a thread singolo, non sfrutta più core. Tuttavia, è possibile che il kernel possa eseguire il bump del thread tra i core. Dubito che questa sia la causa dei tuoi problemi di prestazioni.

Se si desidera legare il thread su un singolo core (non è sicuro se questo può essere garantito), si potrebbe voler controllare la proprietà System.Diagnostics.ProcessThread.ProcessorAffinity, anche se non l'ho mai usato da solo.

+0

Grazie Ani, proverò a vedere se posso usare quello – Paul

+0

Hey Ani, impostando ProcessorAffinity a farlo funzionare! Grazie! :) – Paul

Problemi correlati