Ho un processo a esecuzione prolungata che legge file di grandi dimensioni e scrive file di riepilogo. Per velocizzare le cose, sto elaborazione di più file contemporaneamente utilizzando normali discussioni vecchie:Threads vs Process in .NET
ThreadStart ts = new ThreadStart(Work);
Thread t = new Thread(ts);
t.Start();
Quello che ho trovato è che anche con thread separati lettura di file separate e nessun impuntamento tra di loro e con 4 thread su un 24 -core box, non riesco nemmeno a ottenere fino al 10% sulla CPU o al 10% sull'I/O del disco. Se uso più thread nella mia app, sembra che funzioni ancora più lentamente.
Direi che sto facendo qualcosa di sbagliato, ma dove è curioso è che se avvii l'intero exe una seconda e una terza volta, in realtà processa i file due o tre volte più velocemente. La mia domanda è: perché non posso ottenere 12 thread nella mia app per elaborare i dati e tassare la macchina e 4 thread in 3 istanze della mia app?
Ho profilato l'app e le funzioni più intensive e chiamate più frequentemente sono tutte chiamate di elaborazione delle stringhe.
Impossibile dire senza il codice effettivo che esegue l'elaborazione del file. –
Che cosa ha eseguito il profilo per dirti dove si trova il collo di bottiglia? –
Ci devono essere alcuni luoghi comuni (ai quali si accede dai thread di elaborazione) con codice di blocco/sincronizzazione, potresti condividere questo codice di sincronizzazione – sll