Tengo una aplicación que me han encargado limpiar después. La aplicación en sí es relativamente simple: ejecuta una consulta SQL, consume un servicio web y arroja los resultados a un archivo de registro. Mi trabajo es archivar los archivos en nuestro NAS después de que la aplicación termine con ellos. Bloquea los archivos exclusivamente hasta que termina con ellos, por lo que agrega un poco de complejidad. Tampoco puedo tocar la aplicación, solo los registros. De todos modos, mi aplicación es bastante simple:Retransmisor de flujo inverso
- Compruebe si el archivo se puede abrir (atrapar IOException) y márquelo como accesible en un bool [] si no se produce ninguna excepción.
- Pasando por la matriz de archivos marcados como verdaderos, lea cada línea del archivo en un StreamReader utilizando el método ReadLine. Debido a que la aplicación de vez en cuando falla y no termina, no puedo simplemente usar la IOException para decir si el archivo se ha completado. De hecho, tengo que analizar el texto.
- Si se encuentra el texto que indica la finalización, comprima el archivo, cargue el archivo archivado en el NAS y elimine el original.
Mi código funciona, solo requiere mucho tiempo (los archivos de registro tienen 500 MB cada uno). Mi opinión sobre la mejora implica comenzar mi búsqueda desde la parte inferior del archivo en lugar de desde la parte superior, pero StreamReader no es compatible con dicho método. No puedo usar el método ReadToEnd y luego leer en reversa porque eso arroja una excepción de falta de memoria. ¿Alguna idea de cómo podría acelerar el análisis del archivo de registro?
sabes que analizar los archivos es la parte lenta? no comprimir, copiar al NAS, eliminar o intentar abrir el archivo (y posiblemente fallar) todas esas cosas suenan como si pudieran tomar un tiempo – luke
Posible engaño: http://stackoverflow.com/questions/452902/how-to-read -a-text-file-reversely-with-iterator-in-c –
Buena pregunta. Sí, definitivamente es el análisis la porción de la ejecución que consume mucho tiempo. Separé el código en funciones individuales y puse puntos de corte en cada una. La compresión toma entre 30 y 45 segundos, el análisis puede llevar más de dos horas. – monkeyninja