У меня есть анализатор файлов, который загружает файл как объект сопоставления файлов, а затем отображает регион в зависимости от требований вызывающего.
К файлам можно получить доступ локально или по сети.
Это чтение файла является последовательным.
У меня было 2 подхода -
Подход 1
Создайте объект file_mapping, скажем, f.
Создание сопоставленных регионов с использованием
'f', где одновременно активен только один mapped_region.
Подход 2
Создание нового объекта file_mapping (для того же файла) каждый раз, когда
mapped_region должен быть создан.
Подход 2, основанный на предположении, что file_mapping предназначен для межпроцессного взаимодействия, поэтому создание нескольких объектов file_mapping для одного файла не будет проблемой.
Когда к файлу обращались локально, показывались показатели производительности,
одинаковое время в обоих подходах (для файла 3 ГБ)
Однако, когда к файлам обращались из сети,
Подход 2, выполненный в ~ 5 раз медленнее по сравнению с Подходом 1.
В обоих подходах mapped_region разрушается до создания нового.
Единственное отличие в подходе 2 состоит в том, что объект file_mapping создается и уничтожается для каждого mapped_region.
Стендовая разметка Процедура для последовательной операции чтения файла:
Размер файла: 3 ГБ
Количество созданных областей: 8600
Размер области карты: переменная, варьируется в диапазоне от 9КБ до 900КБ
Доступ к регионам: доступ ко всем регионам осуществляется сразу после их
создание.
Частота создания областей: одна за другой в
цикл, с некоторой обработкой данных, извлеченных из отображенной области.
Обработка включает в себя заполнение рекурсивной структуры, хотя глубина максимальна
10. Это не очень интенсивно.
Я хочу понять:
Почему такая большая разница во времени?
Что именно происходит при создании объекта file_mapping?
Что именно происходит при создании возражения mapped_region?
Ищет ли ОС большой кусок памяти во время file_mapping
создание или во время создания mapped_region?
Когда данные файла фактически загружаются в основную память?
Большое спасибо.