Estoy desarrollando una aplicación destinada a sistemas de escritorio que pueden tener tan solo 256MB de RAM (Windows 2000 en adelante). En mi aplicación tengo este archivo grande (> 256MB) que contiene registros fijos de aproximadamente 160 bytes/cada uno. Esta aplicación tiene un proceso bastante largo en el que, con el tiempo, accederá aleatoriamente a aproximadamente el 90% del archivo (para leer y escribir). Cualquier escritura de registro dada no tendrá más de 1,000 accesos de registro de la lectura de ese registro en particular (puedo ajustar este valor).CreateFileMapping, MapViewOfFile, cómo evitar mantener la memoria del sistema
Tengo dos opciones obvias para este proceso: E/S regular (FileRead, FileWrite) y asignación de memoria (CreateFileMapping, MapViewOfFile). Este último debería ser mucho más eficiente en sistemas con suficiente memoria, pero en sistemas con poca memoria intercambiará la mayor parte de la memoria de otras aplicaciones, lo que en mi aplicación es un no-no. ¿Hay alguna manera de evitar que el proceso consuma toda la memoria (por ejemplo, forzar el vaciado de las páginas de memoria a las que ya no accedo)? Si esto no es posible, entonces debo recurrir a la E/S regular; Me hubiera gustado usar E/S superpuestas para la parte de escritura (ya que el acceso es tan aleatorio), pero la documentación dice writes of less than 64K are always served synchronously.
Se agradecen todas las ideas para mejorar la E/S.
¿Quizás VirtualFree (MEM_DECOMMIT) puede ser de ayuda? No estoy familiarizado con eso. –
No, VirtualFree (MEM_DECOMMIT) falla para los archivos MMF; Acabo de verificar. –