2010-09-09 14 views
9

¿Hay un tamaño de porción óptimo para procesar archivos de gran tamaño? Tengo un servicio de carga (WCF) que se utiliza para aceptar cargas de archivos que van desde varios cientos de megabytes.Cómo calcular el tamaño de porción óptimo para cargar archivos de gran tamaño

He experimentado con tamaños de bloques de 4KB, 8KB a 1MB. Los tamaños de porción más grandes son buenos para el rendimiento (procesamiento más rápido), pero a costa de la memoria.

Entonces, ¿hay alguna forma de calcular el tamaño óptimo de los fragmentos en el momento de cargar los archivos? ¿Cómo haría uno para hacer tales cálculos? ¿Sería una combinación de memoria disponible y el ancho de banda del cliente, la CPU y la red lo que determina el tamaño óptimo?

Saludos

EDIT: Probablemente debería mencionar que la aplicación cliente estará en Silverlight.

Respuesta

6

Si le preocupa la posibilidad de quedarse sin recursos, lo mejor probablemente se determina mejor evaluando la simultaneidad de carga de vista previa con la memoria disponible de su sistema. La cantidad de cargas simultáneas que tiene en progreso a la vez sería la variable clave clave en cualquier cálculo que pueda realizar. Todo lo que tiene que hacer es asegurarse de tener suficiente memoria para manejar la concurrencia de carga, y eso es bastante trivial de lograr. La memoria es barata y es probable que se quede sin ancho de banda de la red mucho antes de llegar al punto donde su concurrencia sobrepasaría la disponibilidad de su memoria.

Por el lado del rendimiento, este no es el tipo de cosa que realmente puede optimizar mucho durante el diseño y desarrollo de la aplicación. Debe tener el sistema en su lugar, los usuarios cargan archivos de manera real y luego puede monitorear el desempeño real del tiempo de ejecución.

Pruebe con un tamaño de fragmento que coincida con el tamaño de la ventana TCP/IP de su red. Eso es lo más óptimo que realmente necesita para obtener en el momento del diseño.

+1

Bueno, me refería más a las máquinas cliente (sobre las que no tenemos ningún control). Si configuro el tamaño del fragmento para decir 1MB, consumirá toda la memoria en la máquina cliente. Pero si lo ajusto a bajo, llevará mucho tiempo procesarlo. – Fixer

+3

¡Oh! con una máquina cliente, es mucho más simple. La simultaneidad es casi inexistente. Siempre y cuando no guardes los bits en la memoria después de que los obtengas, puedes usar prácticamente cualquier tamaño de fragmento que desees. Cualquier cliente moderno, incluso un teléfono, tiene suficiente CPU y memoria para manejar algunos archivos, siempre y cuando transfiera los bits al almacenamiento después de obtener cada fragmento. Dudo que veas una diferencia significativa en el rendimiento en el nivel de aplicación en función del tamaño del fragmento. Me gustaría ir con 1024 KB para archivos grandes y llamarlo por día. –

Cuestiones relacionadas