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
risposta
Dove una variabile Process
proc
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.
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
@akim Questa modifica non ha senso, poiché in questo caso si riferirebbe al processo corrente che è contrario alla domanda. –
@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
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.
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
Sarei d'accordo su quello potrebbe essere l'hosting di loro Stai dichiarando STA Threading come fanno i modelli VS? – TomTom
Yup giusto – Paul
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.
- 1. Ottieni GNU Octave per lavorare con un processore multicore. (Multithreading)
- 2. Multithreading Java in un laptop con processore quad-core
- 3. ASP.NET di default sfrutta il processore multicore?
- 4. Come eseguire multicore su un MacBook Pro con 2 core?
- 5. È possibile eseguire un'applicazione multithread su un singolo core del computer multicore?
- 6. Quanti core cpu possono utilizzare un singolo processo Java?
- 7. Qual è responsabile di modificare il carico e la frequenza di core di processore multicore
- 8. Come si ottiene VisualStudio 2010 per utilizzare più di un core del processore durante la compilazione?
- 9. Limitazione di un contenitore Docker a un singolo core CPU
- 10. Sezioni critiche con processori multicore
- 11. Come utilizzare un processore di annotazione Java personalizzato in Gradle?
- 12. quale core inizializza per primo all'avvio di un sistema?
- 13. come utilizzare un singolo servlet con un pattern URL diverso?
- 14. Limite applicazione su un singolo account Heroku
- 15. Force VBA per utilizzare la localizzazione britannica
- 16. Force MATLAB mmreader o aveadeader per utilizzare un codec diverso?
- 17. MongoDB è in qualche modo limitato a un singolo core?
- 18. Qualcuno ha eseguito VxWorks su un PC desktop come target
- 19. Utilizzare Elmah.axd singolo per più applicazioni con un singolo registro DB
- 20. Programmazione per processori multi core
- 21. C'è un modo per dedurre un tipo di un singolo elemento di un array in C++
- 22. Sostituzione codice con un processore di annotazione
- 23. infinito abort() in un backrace di un core core del programma C++
- 24. Applicazione cancellabile in C# in un eseguibile
- 25. Applicazione di un singolo carattere a un intero sito Web con i CSS
- 26. FFT in un singolo file C
- 27. Sostituire un singolo elemento in un array
- 28. classe template con un singolo metodo specializzato in C++
- 29. come scaricare un singolo file con multi-thread in C#
- 30. È possibile utilizzare Core Animation per sfumare un UIBarButtonItem?
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) –
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