Tengo un proceso de larga ejecución que lee archivos de gran tamaño y escribe archivos de resumen. Para acelerar las cosas, estoy procesar varios archivos al mismo tiempo usando viejos hilos regulares:Hilos vs procesos en .NET
ThreadStart ts = new ThreadStart(Work);
Thread t = new Thread(ts);
t.Start();
Lo que he encontrado es que incluso con hilos separados leer archivos separados y sin bloqueo entre ellos y por medio de 4 hilos en un 24 cuadro de puntuación, ni siquiera puedo obtener hasta un 10% en la CPU o un 10% en la E/S de disco. Si uso más hilos en mi aplicación, parece funcionar aún más lentamente.
Supongo que estoy haciendo algo mal, pero cuando me da curiosidad es que si comienzo el exe por segunda y tercera vez, entonces procesa los archivos dos y tres veces más rápido. Mi pregunta es, ¿por qué no puedo obtener 12 hilos en mi única aplicación para procesar datos y gravar el equipo, así como 4 hilos en 3 instancias de mi aplicación?
He creado un perfil de la aplicación y las funciones que requieren más tiempo y llamadas frecuentes son todas las llamadas de procesamiento de cadenas.
Imposible decir sin el código real haciendo el procesamiento de archivos. –
¿Qué le dijo el perfil acerca de dónde está el cuello de botella? –
Debe haber algunos lugares comunes (a los que acceden los subprocesos de procesamiento) con código de bloqueo/sincronización, ¿podría compartir este código de sincronización – sll