Ho un metodo nel mio algoritmo che esegue un ciclo molto stretto su un insieme di dati molto grande. L'ho originariamente scritto a thread singolo che andava bene, ma ci è voluto molto tempo. Ora sono al punto di voler accelerare, quindi ora sto usando ThreadPool per parallelizzare il lavoro. Il problema è che questo fa sì che il mio utilizzo della CPU passi al 95-100%, cosa che mi aspettavo. Tuttavia, le mie prestazioni sono aumentate notevolmente, ma penso che avrei potuto renderlo migliore se avessi potuto ridurre tutto il cambio di contesto. Questo fa sì che anche i miei altri programmi siano un po 'più lenti dal momento che devono combattere i thread per le risorse della CPU.Chiamate threadback in anello chiuso - 100% CPU
La mia domanda è: come devo procedere? L'unica cosa che ho potuto pensare è di limitare il numero di thread in esecuzione contemporaneamente, ma questo potrebbe rallentare il mio algoritmo poiché solo pochi thread saranno in grado di essere eseguiti contemporaneamente. Non voglio aggiungere addormentamenti nelle mie discussioni perché ho solo bisogno dell'algoritmo per eseguire il completamento il più rapidamente possibile.
MODIFICA: diverse persone hanno menzionato l'utilizzo del TPL. Penso che sia una grande idea, ma sfortunatamente ho dimenticato di dire che sono bloccato usando .NET 3.5 dato che l'applicazione madre non ha ancora rilasciato una versione che usa .NET 4.
Se si desidera la velocità, perché si eliminano tutte le cose più veloci? L'interruttore di contesto è fatto dal sistema operativo, non si scherza con questo ... – gbianchi
La soluzione è ridurre la priorità dei thread nel pool. Questa non è una risposta perché non so come farlo in modo efficiente :( –
Sembra che tu debba ampliare le singole attività: OTOH, il threadpool è abbastanza intelligente da fare già la maggior parte di ciò che suggerisci. rispetto alle CPU, li accoderà invece di avviare più thread. –