sto usando Parallel LINQ, e sto cercando di scaricare molti URL contemporaneamente utilizzando essentily codice come questo:Parallel LINQ - utilizzare più thread rispetto ai processori (per i non-CPU compiti legati)
int threads = 10;
Dictionary<string, string> results = urls.AsParallel(threads).ToDictionary(url => url, url => GetPage(url);
Dal il download delle pagine Web è limitato dalla rete anziché dalla CPU, utilizzando più thread del mio numero di processori/core è molto positivo, poiché la maggior parte del tempo in ciascun thread è trascorsa in attesa che la rete raggiunga il livello. Tuttavia, a giudicare dal fatto che l'esecuzione di quanto sopra con threads = 2 ha le stesse prestazioni di threads = 10 sulla mia macchina dual core, sto pensando che le pedate inviate ad AsParallel siano limitate al numero di core.
Esiste un modo per ignorare questo comportamento? C'è una libreria simile disponibile che non ha questa limitazione?
(ho trovato una libreria per Python, ma hanno bisogno di qualcosa che funziona in .Net)
sto ottenendo lo stesso sintomo. Ho eseguito la tua analisi e ho ottenuto solo 1 thread .. credo che l'aumento delle prestazioni da 1 a 2 thread che ho visto era nella mia testa –
@DrFredEdison: Quindi cosa succede se si utilizza il modulo Select/ToDictionary come nell'esempio, invece? –
Sto vedendo praticamente lo stesso risultato di te. Ricevo circa 5 thread utilizzati per ogni prova ora. Grazie per avermi fatto arrivare così lontano ... Penso che per il momento avrò lavoro per quello che mi serve. –