Mi programa tiene una lista de 200k archivos. Tengo que importar cada uno a la base de datos. Me lleva mucho tiempo, así que comencé a investigar acerca de los multihilos como un medio para acelerar el proceso de importación. Finalmente llegué a una implementación, pero no estoy seguro de que realmente funcione.¿Cómo puedo verificar que mi código multiproceso se esté ejecutando realmente en varios hilos?
Después de usar Workaround for the WaitHandle.WaitAll 64 handle limit? como una muestra de mi código C# He ocurrió:
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();
}
Y HandleFile() sale como:
private void HandleFile(object s)
{
try
{
//code
}
finally
{
if (Interlocked.Decrement(ref threadCount) == 0)
{
Finished.Set();
}
}
}
he puesto esos Console.Write pensando que si un proceso es más largo terminaría más tarde que otro ("0 0 1 2 2 1 3 3 ..."), pero siempre está en orden ("0 0 1 1 2 2 3 3 4 4 ... ")
Tengo un comentario: ¿está seguro de que su código gasta tiempo en computar cosas, en lugar de hacer operaciones de E/S de archivos y de bases de datos? De lo contrario, tenga en cuenta que hacer cosas en paralelo puede no acelerar demasiado el código (es decir, no es más rápido leer archivos en paralelo que leerlos uno por uno, excepto si los archivos están almacenados en discos duros diferentes). discos). –
Sí, pero ¿qué pasa con la base de datos? Cada hilo abre una conexión diferente a la base de datos, por lo que debería acelerarse si utilizo el paralelismo. –
no estoy tan seguro. Prueba y ve lo que sucede. En todos los casos, si el cuello de botella son operaciones de E/S de disco (localmente o en el nivel de la base de datos), la implementación del paralelismo ralentizará las cosas. –