Il mio programma ha una lista di file 200k. Devo importare ciascuno nel database. Mi ci vuole molto tempo, quindi ho iniziato a fare ricerche sui multithread come mezzo per accelerare il processo di importazione. Ho finalmente ottenuto un'implementazione ma non sono sicuro che funzioni effettivamente.Come posso verificare che il mio codice multithreading sia effettivamente in esecuzione su più thread?
Dopo aver usato Workaround for the WaitHandle.WaitAll 64 handle limit? come campione per il mio codice C# che ho si avvicinò con:
int threadCount = 0;
for (int i = 0; i < this.Total; i++)
{
Finished = new ManualResetEvent(false);
threadCount = this.ThreadCount;
Interlocked.Increment(ref threadCount);
FileHandler fh = new FileHandler(finished, sorted[i], this.PicturesFeatures, this.Outcome, this.SiteIds, this.LastId, this.Order, this.ThreadCount);
Console.Write(i + " ");
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleFile), fh);
Console.Write(i + " ");
Finished.WaitOne();
}
E HandleFile() va come:
private void HandleFile(object s)
{
try
{
//code
}
finally
{
if (Interlocked.Decrement(ref threadCount) == 0)
{
Finished.Set();
}
}
}
ho messo quei Console.Write pensando che se un processo è più lungo finirebbe più tardi di qualche altro ("0 0 1 2 2 1 3 3 ..."), ma è sempre in ordine ("0 0 1 1 2 2 3 3 4 4 ... ")
Ho un'osservazione: sei sicuro che il tuo codice impieghi tempo per il calcolo, piuttosto che eseguire operazioni di I/O e database dei file? Altrimenti, sii consapevole del fatto che fare cose in parallelo potrebbe non velocizzare troppo il tuo codice (ad esempio non è più veloce leggere i file in parallelo che leggerli uno per uno, eccetto se i file sono memorizzati su hard differenti dischi). –
Sì, ma che dire del database? Ogni thread apre una connessione diversa al database, quindi dovrebbe accelerare se utilizzo il parallelismo. –
non così sicuro. Prova e vedi cosa succede. In tutti i casi, se il collo di bottiglia è rappresentato da operazioni di I/O su disco (localmente oa livello di database), l'implementazione del parallelismo rallenterà le cose. –