Sto usando Parallel.ForEach e sto facendo alcuni aggiornamenti del database, ora senza impostare MaxDegreeOfParallelism, un computer con processore dual core risulta in timeout client SQL, mentre in altri casi il processore quad core in qualche modo non ha timeout.Che cosa fa MaxDegreeOfParallelism?
Ora non ho il controllo su quale tipo di core del processore sono disponibili dove viene eseguito il mio codice, ma ci sono alcune impostazioni che posso modificare con MaxDegreeOfParallelism che probabilmente eseguirà meno operazioni contemporaneamente e non determinerà timeout?
Posso aumentare i timeout ma non è una buona soluzione, se sulla CPU inferiore posso elaborare meno operazioni contemporaneamente, che metterà meno carico sulla cpu.
Ok Ho letto anche tutti gli altri post e MSDN, ma impostando MaxDegreeOfParallelism su un valore inferiore, le mie macchine quad core soffrirebbero?
Ad esempio, c'è comunque qualcosa da fare, se la CPU ha due core, quindi usare 20, se la CPU ha quattro core allora 40?
La mia logica non ha alcuna attesa o alcun IO, semplicemente aggiorna SQL, sì SQL potrebbe avere il suo, ma soprattutto sto aspettando che l'SQL finisca. Qual è il numero massimo predefinito di thread attivi utilizzati? –
Il valore predefinito è 2 per core, ma il TPL può sollevarlo se il codice non utilizza la CPU. La maggior parte dei database coinvolge una certa quantità di IO. –
Se il mio computer a 6 core è molto carico, utilizza solo 1 o 2 thread. Se è leggermente caricato, sale a 12. È abbastanza intelligente da tenere conto del carico del sistema esistente. – Contango