¿Cuáles son los inconvenientes (si corresponde) del uso de archivos mapeados en memoria para leer (archivos de tamaño normal) sobre hacer lo mismo utilizando la combinación CreateFile ReadFile?Asignación de memoria de archivos frente a CreateFile/ReadFile
Respuesta
Necesitará un código más complejo para establecer la asignación de archivos que solo para abrir y leer. La asignación de archivos está destinada para el acceso aleatorio a una sección del archivo. Si no necesita eso, simplemente no se moleste con el mapeo de archivos.
Además, si alguna vez necesitas transportar tu código a otra plataforma, lo harás mucho más fácil y rápido si no usas la asignación de archivos.
Con ReadFile/WriteFile tiene una semántica de manejo de errores determinista. Cuando utiliza archivos mapeados en memoria, los errores se devuelven arrojando una excepción.
Además, si el archivo mapeado en memoria tiene que golpear el disco (o peor, la red), su lectura de memoria puede tardar varios segundos (o incluso minutos) en completarse. Dependiendo de su aplicación, esto puede causar paradas inesperadas.
Si usa ReadFile/WriteFile puede utilizar variantes asincrónicas de la API para permitirle controlar este comportamiento.
También tiene un rendimiento más determinista si usa ReadFile, especialmente si su patrón de E/S es predecible: la E/S asignada a la memoria suele ser aleatoria, ya que ReadFile casi siempre es serial (ya que ReadFile lee en la posición actual del archivo y avanza la posición actual del archivo).
Una gran ventaja de la asignación de archivos es que no influye en la memoria caché del sistema. Si su aplicación hace una E/S excesiva por medio de ReadFile, la caché de su sistema crecerá y consumirá más y más memoria física. Si su sistema operativo es de 32 bits y tiene más de 1 GB de memoria, entonces tiene suerte, ya que en Windows de 32 bits, el tamaño de la memoria caché del sistema está limitado por 1 GB. De lo contrario, la memoria caché del sistema consumirá toda la memoria física disponible y el administrador de memoria pronto comenzará a purgar páginas de otros procesos en el disco, lo que intensificará las operaciones del disco en lugar de reducirlas. El efecto es especialmente notable en Windows de 64 bits, donde el tamaño de la caché está limitado solo por la memoria física disponible. La asignación de archivos, por otro lado, no lleva a un crecimiento excesivo de la memoria caché del sistema y, al mismo tiempo, no degrada el rendimiento.
- 1. Grupo de objetos frente a asignación dinámica
- 2. agregación de la clase de diseño: asignación de la pila frente a la asignación de la memoria dinámica
- 3. 64bit Asignación de memoria
- 4. Asignación de memoria a char * Lenguaje C
- 5. Asignación de memoria dinámica
- 6. Fortran: matrices dinámicas frente a matriz automática Evitar la asignación de memoria
- 7. Barreras de memoria frente a operaciones interbloqueadas
- 8. Asignación de memoria de Android
- 9. de asignación de memoria Problema
- 10. Sugerencia de asignación de memoria
- 11. Asignación de memoria en C++
- 12. asignación dinámica de la memoria
- 13. asignación de memoria en C++
- 14. Asignación dinámica de memoria pregunta
- 15. Asignación de memoria en C
- 16. Java Memoria Asignación Fugas
- 17. Asignación de memoria y desasignación a través de subprocesos
- 18. Asignación de memoria dinámica basada en disco
- 19. Extraño comportamiento de asignación de memoria iOS
- 20. Alineación de asignación de memoria Java
- 21. C++ problema de asignación de memoria
- 22. git-clone error de asignación de memoria
- 23. Almacenamiento de datos en memoria: sesión frente a caché frente a estático
- 24. Asignación de memoria de objeto Delphi
- 25. Perfilado de asignación de memoria en C++
- 26. Asignación de memoria de método estático
- 27. Asignación de memoria sin bloqueo de Java
- 28. Confundido sobre la asignación de memoria
- 29. asignación de memoria dinámica en 'c' Cuestiones
- 30. sprintf() con asignación de memoria automática?