Я разрабатываю приложение, предназначенное для настольных систем, которые могут иметь всего 256 МБ ОЗУ (Windows 2000 и выше). В моем приложении у меня есть этот большой файл ( > 256 МБ), который содержит фиксированные записи около 160 байт/каждый. Это приложение имеет довольно длительный процесс, в котором со временем он будет случайно получать около 90% файла (для чтения и записи). Любая записанная запись не будет содержать более 1000 записей доступа от чтения этой конкретной записи (я могу настроить это значение).
У меня есть два очевидных варианта для этого процесса: регулярный ввод-вывод (FileRead, FileWrite) и сопоставление памяти (CreateFileMapping, MapViewOfFile). Последнее должно быть намного более эффективным в системах с достаточной памятью, но в системах с низкой памятью он заменит большую часть памяти других приложений, что в моем приложении не имеет значения. Есть ли способ удержать процесс от съедания всей памяти (например, как принудительное удаление страниц памяти, к которым я больше не обращаюсь)? Если это невозможно, то я должен вернуться к регулярному вводу/выводу; Мне хотелось бы использовать перекрывающиеся ввода-вывода для записывающей части (поскольку доступ настолько случайный), но в документации говорится: записи менее 64K всегда обслуживаются синхронно.
Приветствуются любые идеи по улучшению ввода-вывода.