(SOLUCIONADO) Se puede mejorar este FOR?

Iniciado por Eleкtro, 26 Noviembre 2012, 10:15 AM

0 Miembros y 2 Visitantes están viendo este tema.

Eleкtro

Hola,

Mi app trabaja sobre MILES de archivos y quisiera saber si puedo mejorar este for para disminuir el tiempo de procesado:

Código (vbnet) [Seleccionar]

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...








Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Keyen Night

#2
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:

Código (vb.net) [Seleccionar]
           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
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

TomaSs

Posiblemente esto te sirva, que tiene que ver con lo que te han dicho por aquí
;)

Eleкtro

Gracias a todos, especialmente por la larga explicación de Keyen, en cuanto tenga más organizado el form probaré lo dle findfiles.