Mi aún por lanzarse La aplicación Delphi 2010 permite a los usuarios cargar sus archivos en mis servidores. En este momento estoy usando HTTPS POST para enviar los archivos, el (simplificado) algoritmo es básicamente:¿Cómo optimizar la rutina de carga con Delphi 2010?
- archivo partido en "cortes" (256 KB cada una)
- Para cada rebanada, publicarla en el servidor
ie. para un archivo de 1 MB:
--> Get Slice #1 (256KB)
--> Upload Slice #1 using TidHTTP.Post()
--> Get Slice #2 (256KB)
--> Upload Slice #2 using TidHTTP.Post()
--> Get Slice #3 (256KB)
--> Upload Slice #3 using TidHTTP.Post()
--> Get Slice #4 (256KB)
--> Upload Slice #4 using TidHTTP.Post()
estoy usando Indy 10. Yo (ab) usé mi perfilador una y otra vez y no me queda mucho para optimizar, excepto cambiar la rutina de carga.
También estoy usando multi-threading, ya pesar de que hice todo lo posible para optimizar mi código, mis puntos de referencia todavía me dicen que puedo hacerlo mejor (hay otro software que lo hacen bien optimizado lograr un mucho ! ... mejor tiempo casi dos veces más rápido que mi rutina de carga)
sé que no es culpa de mi servidor ... aquí están las ideas que todavía tengo que explorar:
probé agrupación rebanadas en un solo POST, naturalmente esto dio como resultado un aumento de rendimiento (20-35%) pero ahora se reduce la capacidad de reanudación.
También pensé en usar SFTP/SSH, pero no estoy seguro si es rápido.
Use sockets web para implementar la carga reanudable (como this component), tampoco estoy seguro de la velocidad.
Ahora mi pregunta es: ¿hay algo que pueda hacer para acelerar mi carga? Estoy abierto a cualquier sugerencia de que puedo poner en práctica, incluyendo las herramientas de línea de comandos (si la licencia me permite enviar con mi solicitud), a condición de que:
- carga reanudable es compatible
- rápido!
- uso de memoria razonable
- Secure & permitir la autenticación de usuario/usuario
Además, debido a importantes problemas de seguridad, FTP es un no es algo que me gustaría poner en práctica.
¡Muchas gracias!
¿La transferencia usa compresión/descompresión de datos? – mjn
¿qué hay del lado del servidor? – kobik
@mjn: yes (los segmentos ya están comprimidos antes de ser cargados + Yo uso TIdCompressorZLib de Indy) – TheDude