Как улучшить общий ввод / вывод, чтобы быть на одном уровне с отображением файлов - PullRequest
0 голосов
/ 14 января 2011

Сопоставление файлов отлично, но для сравнительно больших файлов в 32-битной системе следует об этом забыть и реализовать все с помощью общего файлового ввода-вывода.Для больших случайных операций чтения и записи системный кэш работает почти так же хорошо, как и отображение файлов.Но для небольших операций вокруг небольших файловых областей разница огромна, файловый ввод / вывод в десять раз медленнее, чем эквивалентные действия для файлов сопоставления файлов.Последний в основном из-за многократных вызовов SetFilePointer, ReadFile, WriteFile даже для нескольких небольших действий.

Итак, я хотел бы внедрить или использовать какой-то кеш (или, возможно, какой-то трюк), который должен эффективно работать для небольших операций чтения / записи, но мне не нужен какой-то сложный, поскольку для больших операций Windows выполняетпрекрасная работа.Есть какой-то известный подход к этому?

Спасибо

Макс

1 Ответ

0 голосов
/ 14 января 2011

Отвечая на мой вопрос для других, чтобы рассмотреть аналогичный подход в будущем

Похоже, лучше всего поддерживать многократные буферизованные отображенные представления для файла. В этом случае массив обеспечивает быстрый доступ к указателям на блоки памяти (vies), и если указатель, рассчитанный на основе запрошенного смещения, действителен, то нужно просто получить доступ к данным, если нет - тогда выделить новый вид, при необходимости сохраняя общее количество просмотров до определенного предела. Я реализовал это сравнительно быстро как для чтения, так и для письма, и результаты очень многообещающие

...