Главная страница
Навигация по странице:

  • Процессы, представления и управление памятью

  • Программирование с использованием отображенных в память файлов

  • Задача

  • Безопасность

  • Process A

  • Классы используемые в примерах

  • Сопоставленные в памяти файлы. Сопоставленные в памяти файлы


    Скачать 297.86 Kb.
    НазваниеСопоставленные в памяти файлы
    Дата19.10.2022
    Размер297.86 Kb.
    Формат файлаdocx
    Имя файлаСопоставленные в памяти файлы.docx
    ТипДокументы
    #743022

    Сопоставленные в памяти файлы

    Отображаемый в память файл содержит содержимое файла в виртуальной памяти. Отображение файла в области памяти позволяет приложению, содержащему несколько процессов, взаимодействовать с файлом путем чтения этой памяти и записи в нее. Вы можете использовать управляемый код для доступа к сопоставленным в памяти файлам тем же способом, что и собственные функции Windows. Описание этого механизма можно найти на странице Управление сопоставленными в памяти файлами.

    Есть два типа отображенных в память файлов:

    • Постоянные отображенные в память файлы.

    В контексте отображения в память постоянными называются файлы, сопоставленные с исходным файлом на диске. Когда последний процесс завершит работу с таким файлом, все данные сохраняются в исходный файл на диске. Такие отображенные в память файлы удобны для работы с очень большими исходными файлами.

    • Непостоянные отображенные в память файлы.

    Непостоянными называются отображенные в память файлы, которые не сопоставлены с файлом на диске. Когда последний процесс закончит работу с таким файлом, данные не сохраняются, а файл удаляется при сборке мусора. Такие файлы позволяют создать общую область памяти для межпроцессного взаимодействия (IPC).

    Процессы, представления и управление памятью


    Отображенные в память файлы можно сделать общими для нескольких процессов. Процессы могут обращаться к одному отображенному в память файлу по единому имени, которое назначается процессом, создающим этот файл.

    Для работы с отображенным в память файлом следует создать представление всего файла или его части. Также вы можете создать несколько представлений для одной части отображенного в память файла, фактически применяя одновременно используемую память. Чтобы два представления оставались согласованными, их нужно создавать из одного отображенного в память файла.

    Несколько представлений потребуются еще и в том случае, если размер файла превышает размер пространства логической памяти, доступной приложению для сопоставления с памятью (например, 2 ГБ на 32-разрядном компьютере).

    Есть два типа представлений: представление потокового доступа и представление произвольного доступа. Представления потокового доступа удобны для последовательного доступа к файлу (чаще всего это непостоянные файлы и IPC). Представления произвольного доступа предпочтительны для работы с постоянными файлами.

    Доступ к сопоставленным с памятью файлам осуществляется через диспетчер памяти операционной системы, который автоматически разделяет файл на несколько страниц и предоставляет их по мере необходимости. Вам не придется самостоятельно осуществлять управление памятью.

    На следующем изображении показано, как несколько процессов могут одновременно использовать несколько перекрывающихся представлений для одного отображенного в память файла:

    На следующем рисунке показано несколько перекрывающихся представлений для отображенного в память файла:


    Программирование с использованием отображенных в память файлов


    В следующей таблице содержатся инструкции по использованию объектов и элементов для отображенных в память файлов.

    Задача

    Применимые методы или свойства

    Получение объекта MemoryMappedFile, который представляет постоянный файл, отображенный в память из файла на диске.

    Метод MemoryMappedFile.CreateFromFile.

    Получение объекта MemoryMappedFile, который представляет непостоянный файл, отображенный в память из файла на диске.

    Метод MemoryMappedFile.CreateNew.

    -или-

    Метод MemoryMappedFile.CreateOrOpen.

    Получение объекта MemoryMappedFile для уже существующего отображенного в память файла (постоянного или непостоянного).

    Метод MemoryMappedFile.OpenExisting.

    Получение объекта UnmanagedMemoryStream для представления последовательного доступа для отображенного в память файла.

    Метод MemoryMappedFile.CreateViewStream.

    UnmanagedMemoryAccessor Получение объекта для представления случайного доступа к файлу, сопоставленном с памятью.

    Метод MemoryMappedFile.CreateViewAccessor.

    Получение объекта SafeMemoryMappedViewHandle для использования с неуправляемым кодом.

    Свойство MemoryMappedFile.SafeMemoryMappedFileHandle.

    -или-

    Свойство MemoryMappedViewAccessor.SafeMemoryMappedViewHandle.

    -или-

    Свойство MemoryMappedViewStream.SafeMemoryMappedViewHandle.

    Задержка распределения памяти до момента, когда будет создано представление (только для непостоянных файлов).

    (Чтобы определить текущий размер системной страницы, используйте свойство Environment.SystemPageSize.)

    Метод CreateNew со значением MemoryMappedFileOptions.DelayAllocatePages.

    -или-

    Методы CreateOrOpen, которые принимают в качестве параметра перечисление MemoryMappedFileOptions.




    Безопасность


    При создании отображенного в память файла вы можете применить к нему права доступа. Для этого используйте следующие методы, которые принимают в качестве параметра перечисление MemoryMappedFileAccess:

    • MemoryMappedFile.CreateFromFile

    • MemoryMappedFile.CreateNew

    • MemoryMappedFile.CreateOrOpen

    Вы можете указать права доступа для открытия существующего отображенного в память файла, используя методы OpenExisting, которые принимают MemoryMappedFileRights в качестве параметра.

    Кроме того, можно включить объект MemoryMappedFileSecurity с предварительно определенными правилами доступа.

    Чтобы применить к отображенному в память файлу новые или измененные правила доступа, используйте метод SetAccessControl. Чтобы получить доступ или проверить правила для существующего файла, используйте метод GetAccessControl.

    Примеры

    Постоянные отображенные в память файлы


    Метод CreateFromFile позволяет создать отображенный в память файл из существующего файла на диске.

    В следующем примере создается отображенное в память представление для части очень большого файла, с которым выполняются определенные действия:



    В следующем примере тот же отображенный в память файл открывается для другого процесса:


    ПРИМЕР Непостоянные отображенные в память файлы


    Методы CreateNew и CreateOrOpen позволяют создать отображенный в память файл, который не сопоставлен ни с каким файлом на диске.

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

    1. Process A — создается отображенный в память файл и в него записывается значение.

    2. Process B — открывается отображенный в память файл и в него записывается значение.

    3. Process C — открывается отображенный в память файл и в него записывается значение.

    4. Process A — из отображенного в память файла считываются значения, затем значения отображаются.

    5. Когда в Process A завершается работа с отображенным в память файлом, он немедленно уничтожается при сборке мусора.

    Чтобы выполнить этот пример, сделайте следующее:

    1. Скомпилируйте приложение и откройте три окна командной строки.

    2. В первом окне командной строки выполните команду Process A.

    3. Во втором окне командной строки выполните команду Process B.

    4. Вернитесь к Process A и нажмите клавишу ВВОД.

    5. В третьем окне командной строки выполните команду Process C.

    6. Вернитесь к Process A и нажмите клавишу ВВОД.

    Выходные данные Process A выглядят следующим образом:

    Process A



    Process B



    Process C:



    Классы используемые в примерах:



    написать администратору сайта