Tenemos una utilidad que se usa para cargar archivos (y realizar otras operaciones en el archivo) a una ubicación compartida de la red.
El tamaño del archivo tiende a variar de unos pocos mb a 500 mb.
Ha surgido una sugerencia de que tal vez deberíamos admitir subprocesos múltiples al cargar los archivos en la ubicación compartida, no es necesario que lo haga en fragmentos de bytes, cada subproceso debe elegir un archivo e intentar cargarlo.
No estoy tan seguro de si el subprocesamiento múltiple puede acelerar operaciones de E / S como esta. ¿Es válida mi corazonada?
Si de hecho estamos obligados a construir esta funcionalidad, me preguntaba cuál sería un buen enfoque de diseño para el motor de copia de archivos.
¿Tendría sentido usar una herramienta como robocopy (leí que las versiones más nuevas admiten subprocesos múltiples)?
Editar: Disculpas por el retraso y la falta de información vital.
Esta utilidad está construida con C # (.Net 2.0) y cualquier actualización futura también debe estar usando .Net (la versión de marco no es una restricción). La utilidad se instala en las máquinas de los usuarios (alrededor de 20 en WinXP). El recurso compartido de destino está en el servidor Win2k3.
Edición 2: he decidido ejecutar algunas pruebas con una aplicación simple que implementa la carga del archivo a través de TPL. Publicar este análisis decidiremos si seguir adelante o no. Gracias a todos por la ayuda extendida.
SHFileOperation(FO_COPY)
. Eso le brinda todas las optimizaciones que la gente de Microsoft considera razonables.
select
bucle en lugar de hilos. Aunque hacerlo requiere que "cambie el código al revés" (el código para copiar un archivo ya no es una secuencia directa de comandos), no tendrá que preocuparse por la sincronización de subprocesos.