¿Cuál es la mejor manera de mostrar archivos de gran tamaño sin necesidad de utilizar grandes cantidades de memoria?

StackOverflow https://stackoverflow.com/questions/694137

Pregunta

Muchos editores hexadecimales, como Hex Workshop, incluso pueden leer los archivos de gran tamaño, manteniendo una proporción relativamente pequeña huella de memoria, pero todavía se las arreglan para mantener el desplazamiento suave. Estoy buscando la mejor manera de lograr esto, y por lo que tengo varias preguntas relacionadas.
¿Debo usar FileStream?
- ¿Está su búfer basado en la ubicación de búsqueda actual? (¿Será por lo general fallo de página al desplazarse hacia atrás?)
- Si creo un contenedor para FileStream que sólo utiliza Seek internamente, voy a dañar la capacidad de FileStream para amortiguar adecuadamente? (Es decir, el rendimiento va a sufrir enormemente de la búsqueda repetida, incluso si están cerca busca? ¿Puedo confiar en el algoritmo de almacenamiento en búfer o el planificador de disco para mantener un rendimiento de hasta?)
¿Sería mejor utilizar asignados a la memoria de E / S? (Lo único que realmente espero archivos de hasta 100 MB quizá)
- ¿Quieres pagefaults desde la búsqueda / saltar / desplazamiento rápido crear problemas de rendimiento notable
? En última instancia, los datos tienen que ser visualizado. ¿Debo hacer que todo el archivo como un mapa de bits e invalidar partes de la imagen de los cambios (dejando que el control de desplazamiento hacer su propia localización en la imagen), o debo generar el área de visualización actual sobre eventos de desplazamiento?
Así que en resumen, hacer que la página de datos, la imagen generada, o ambos, o qué recibo / generarlos cuando sea necesario? ¿Cuáles son los (WPF / .Net) bibliotecas / objetos de la API más adecuados para esta tarea?

¿Fue útil?

Solución

Parece que tiene ya la respuesta.
La solución general para esto es usar archivos de memoria mapeada y dejar que el sistema operativo molestarse con el almacenamiento en caché y la búsqueda.
En primer lugar tratar la solución más simple y más obvia. Si no funciona a su satisfacción, optimizar los cuellos de botella. optimizaciones prematura es la raíz de todo mal.

Otros consejos

100 MB realmente no es tan grande. Así, en la memoria, probablemente trabajar en nuevas máquinas.

Pero usted no quiere que su solución para no escala el paso del tiempo. El momento en que asume el límite es de 100 MB alguien va a probar con 200 MB. Así que recomiendo que hagas tomar el "buscan" ruta -. Esa es la forma común de hacerlo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top