Сопоставленные в памяти файлы. Сопоставленные в памяти файлы
Скачать 297.86 Kb.
|
Сопоставленные в памяти файлы Отображаемый в память файл содержит содержимое файла в виртуальной памяти. Отображение файла в области памяти позволяет приложению, содержащему несколько процессов, взаимодействовать с файлом путем чтения этой памяти и записи в нее. Вы можете использовать управляемый код для доступа к сопоставленным в памяти файлам тем же способом, что и собственные функции Windows. Описание этого механизма можно найти на странице Управление сопоставленными в памяти файлами. Есть два типа отображенных в память файлов: Постоянные отображенные в память файлы. В контексте отображения в память постоянными называются файлы, сопоставленные с исходным файлом на диске. Когда последний процесс завершит работу с таким файлом, все данные сохраняются в исходный файл на диске. Такие отображенные в память файлы удобны для работы с очень большими исходными файлами. Непостоянные отображенные в память файлы. Непостоянными называются отображенные в память файлы, которые не сопоставлены с файлом на диске. Когда последний процесс закончит работу с таким файлом, данные не сохраняются, а файл удаляется при сборке мусора. Такие файлы позволяют создать общую область памяти для межпроцессного взаимодействия (IPC). Процессы, представления и управление памятьюОтображенные в память файлы можно сделать общими для нескольких процессов. Процессы могут обращаться к одному отображенному в память файлу по единому имени, которое назначается процессом, создающим этот файл. Для работы с отображенным в память файлом следует создать представление всего файла или его части. Также вы можете создать несколько представлений для одной части отображенного в память файла, фактически применяя одновременно используемую память. Чтобы два представления оставались согласованными, их нужно создавать из одного отображенного в память файла. Несколько представлений потребуются еще и в том случае, если размер файла превышает размер пространства логической памяти, доступной приложению для сопоставления с памятью (например, 2 ГБ на 32-разрядном компьютере). Есть два типа представлений: представление потокового доступа и представление произвольного доступа. Представления потокового доступа удобны для последовательного доступа к файлу (чаще всего это непостоянные файлы и IPC). Представления произвольного доступа предпочтительны для работы с постоянными файлами. Доступ к сопоставленным с памятью файлам осуществляется через диспетчер памяти операционной системы, который автоматически разделяет файл на несколько страниц и предоставляет их по мере необходимости. Вам не придется самостоятельно осуществлять управление памятью. На следующем изображении показано, как несколько процессов могут одновременно использовать несколько перекрывающихся представлений для одного отображенного в память файла: На следующем рисунке показано несколько перекрывающихся представлений для отображенного в память файла: Программирование с использованием отображенных в память файловВ следующей таблице содержатся инструкции по использованию объектов и элементов для отображенных в память файлов.
БезопасностьПри создании отображенного в память файла вы можете применить к нему права доступа. Для этого используйте следующие методы, которые принимают в качестве параметра перечисление MemoryMappedFileAccess: MemoryMappedFile.CreateFromFile MemoryMappedFile.CreateNew MemoryMappedFile.CreateOrOpen Вы можете указать права доступа для открытия существующего отображенного в память файла, используя методы OpenExisting, которые принимают MemoryMappedFileRights в качестве параметра. Кроме того, можно включить объект MemoryMappedFileSecurity с предварительно определенными правилами доступа. Чтобы применить к отображенному в память файлу новые или измененные правила доступа, используйте метод SetAccessControl. Чтобы получить доступ или проверить правила для существующего файла, используйте метод GetAccessControl. ПримерыПостоянные отображенные в память файлыМетод CreateFromFile позволяет создать отображенный в память файл из существующего файла на диске. В следующем примере создается отображенное в память представление для части очень большого файла, с которым выполняются определенные действия: В следующем примере тот же отображенный в память файл открывается для другого процесса: ПРИМЕР Непостоянные отображенные в память файлыМетоды CreateNew и CreateOrOpen позволяют создать отображенный в память файл, который не сопоставлен ни с каким файлом на диске. Приведенный ниже пример состоит из трех отдельных процессов (консольных приложений), при которых логические значения записываются в отображенный в память файл. Последовательность действий следующая: Process A — создается отображенный в память файл и в него записывается значение. Process B — открывается отображенный в память файл и в него записывается значение. Process C — открывается отображенный в память файл и в него записывается значение. Process A — из отображенного в память файла считываются значения, затем значения отображаются. Когда в Process A завершается работа с отображенным в память файлом, он немедленно уничтожается при сборке мусора. Чтобы выполнить этот пример, сделайте следующее: Скомпилируйте приложение и откройте три окна командной строки. В первом окне командной строки выполните команду Process A. Во втором окне командной строки выполните команду Process B. Вернитесь к Process A и нажмите клавишу ВВОД. В третьем окне командной строки выполните команду Process C. Вернитесь к Process A и нажмите клавишу ВВОД. Выходные данные Process A выглядят следующим образом: Process A Process B Process C: Классы используемые в примерах: |