Hola,
Mi app trabaja sobre MILES de archivos y quisiera saber si puedo mejorar este for para disminuir el tiempo de procesado:
Dim accepted_extensions As String = ".264 .3gp .asf .asx .avi .avc .bsf .bdmv .divx .dv .evo .f4v .flv .hdmov .m1v .m2t .m2ts .m2v .m4v .mkv .mov .mp4 .mpeg .mpg .mpv4 .mts .ogm .ogv .qt .rmvb .swf .ts .vob .webm .wmv"
Public Sub PlaylistsWorkWithFilesInDir(ByVal aDir As DirectoryInfo)
consolebox.AppendText("Processing: " + aDir.ToString() + vbNewLine)
consolebox.SelectionStart = consolebox.Text.Length
consolebox.ScrollToCaret()
Dim aFile As FileInfo
For Each aFile In aDir.GetFiles()
If accepted_extensions.ToLower.Contains(aFile.Extension.ToLower) Then
Using writer As StreamWriter = New StreamWriter(aFile.DirectoryName.ToString() & "\" & aDir.Name & ".m3u", True, System.Text.Encoding.UTF8)
writer.WriteLine(aFile.FullName.ToString())
End Using
End If
Next
End Sub
Me pregunto si existirá algún método en el sistema para comprobar si el archivo es un archivo de video, algo así:
If IO.FileType(aFile) = "VideoFile" Then...
CitarRe: Se puede mejorar este FOR?
Algo que no me gusta y que no me parece que aporte a la performance de la aplicación, es que abres y cierras el archivo en cada iteración del for.
Cita de: EleKtro H@cker en 26 Noviembre 2012, 10:15 AM
Me pregunto si existirá algún método en el sistema para comprobar si el archivo es un archivo de video, algo así:
If IO.FileType(aFile) = "VideoFile" Then...
En el framework no la hay.
Saludos
Usa las Apis de Windows FindFile y FindNextFile trabajan mucho más rápido cuando son miles de archivos. También te recomiendo hacer el trabajo desde un BackgroundWorker y usar el evento ProgressChanged para modificar cualquier aspecto visual como una barra de progreso o un Label si lo tienes.
Hay 2 maneras de saber si un archivo corresponde a un tipo, primero lo que haces verificar de una lista de extensiones, así lo hice en una aplicación y tengo está lista:
Public Video As String() = New String() {".ts", ".tts", ".m4v", ".mp4", ".mp4v", ".m2t", ".m2ts", ".mts", _
".mov", ".avi", ".m1v", ".m2v", ".mod", ".mp2v", ".mpa", ".mpe", _
".mpeg", ".mpg", ".mpv2", ".3g2", ".3gp2", ".3gp", ".3gpp", ".asf", _
".wmv", ".flv", ".ogg", ".mkv", ".amc", ".mpeg1", ".mpeg2", ".mpeg4", _
".mqv", ".qt", ".qtl", ".wmx", ".wmz"}
La otra es verificar las cabeceras de los archivos, pero eso es más incomodo XD
Posiblemente esto (http://www.daniweb.com/software-development/csharp/threads/153562/findfirstfile-in-c) te sirva, que tiene que ver con lo que te han dicho por aquí
;)
Gracias a todos, especialmente por la larga explicación de Keyen, en cuanto tenga más organizado el form probaré lo dle findfiles.