PDA

Ver la Versión Completa : funcion CopyFrom SUPER LENTA!


soypincharata
18-05-2007, 05:37:25
Hola gente!
Estoy haciendo un codigo para resumir transferencia de archivos via TCPIP y me encuentro con un problema trabajando con los archivos, mas precisamente con los stream.
No se porque la funcion CopyFrom resulta TREMENDAMENTE LENTA!!! Ej. con un archivo de 60mb tarda como 30 segundos en pasar esa linea. No creo que sea mi PC es bastante rapida.

Aqui esta el codigo:

fileStream := TFileStream.Create(archivo, fmOpenRead); //abro el archivo
fileStream.Seek(Offset, soFromBeginning); //muevo el puntero

memStream := TMemoryStream.Create; //creo el memorySream para pasar por TCP
memStream.CopyFrom(fileStream, fileStream.Size - Offset); //super lento!

El programa anda bien! cumple su funcion, pero anda muy lento por esa linea.
¿Que puede estar pasando?

Gracias por adelantado!

Lepe
18-05-2007, 11:57:28
No soy un gurú de estos temas... pero .... 60 mb / 30 seg = 2 megabytes por segundo.

Quitando la desfragmentación que pueda tener el archivo en el disco duro, yo lo veo rapidito, además poco tiene que ver el ordenador, quizás el cuello de botella está en la red ¿LAN, INTERNET?, tráfico, máxima velocidad de la red, etc.

¿has probado con otras formas de envío? para determinar que es lento?

Saludos

Mick
18-05-2007, 12:18:32
Da la impresion (aunque falta parte del codigo) que asignas los 60Mega enteros a un memory stream, eso son 60 megas leidos de golpe del disco a la memoria, son una burrada de megas para cargar en memoria muchos equipos directamente se colapsaran.
Deberias leer la informacion del archivo en bloques pequeños de unos pocos kilobytes.

Saludos