MemoryMappedFile Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет размещенный в памяти файл.
public ref class MemoryMappedFile : IDisposable
public class MemoryMappedFile : IDisposable
type MemoryMappedFile = class
interface IDisposable
Public Class MemoryMappedFile
Implements IDisposable
- Наследование
-
MemoryMappedFile
- Реализации
Примеры
В следующем примере создается отображенное в память представление для части очень большого файла, с которым выполняются определенные действия:
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Runtime.InteropServices;
class Program
{
static void Main(string[] args)
{
long offset = 0x10000000; // 256 megabytes
long length = 0x20000000; // 512 megabytes
// Create the memory-mapped file.
using (var mmf = MemoryMappedFile.CreateFromFile(@"c:\ExtremelyLargeImage.data", FileMode.Open,"ImgA"))
{
// Create a random access view, from the 256th megabyte (the offset)
// to the 768th megabyte (the offset plus length).
using (var accessor = mmf.CreateViewAccessor(offset, length))
{
int colorSize = Marshal.SizeOf(typeof(MyColor));
MyColor color;
// Make changes to the view.
for (long i = 0; i < length; i += colorSize)
{
accessor.Read(i, out color);
color.Brighten(10);
accessor.Write(i, ref color);
}
}
}
}
}
public struct MyColor
{
public short Red;
public short Green;
public short Blue;
public short Alpha;
// Make the view brighter.
public void Brighten(short value)
{
Red = (short)Math.Min(short.MaxValue, (int)Red + value);
Green = (short)Math.Min(short.MaxValue, (int)Green + value);
Blue = (short)Math.Min(short.MaxValue, (int)Blue + value);
Alpha = (short)Math.Min(short.MaxValue, (int)Alpha + value);
}
}
Imports System.IO
Imports System.IO.MemoryMappedFiles
Imports System.Runtime.InteropServices
Class Program
Sub Main()
Dim offset As Long = &H10000000 ' 256 megabytes
Dim length As Long = &H20000000 ' 512 megabytes
' Create the memory-mapped file.
Using mmf = MemoryMappedFile.CreateFromFile("c:\ExtremelyLargeImage.data", FileMode.Open, "ImgA")
' Create a random access view, from the 256th megabyte (the offset)
' to the 768th megabyte (the offset plus length).
Using accessor = mmf.CreateViewAccessor(offset, length)
Dim colorSize As Integer = Marshal.SizeOf(GetType(MyColor))
Dim color As MyColor
Dim i As Long = 0
' Make changes to the view.
Do While (i < length)
accessor.Read(i, color)
color.Brighten(10)
accessor.Write(i, color)
i += colorSize
Loop
End Using
End Using
End Sub
End Class
Public Structure MyColor
Public Red As Short
Public Green As Short
Public Blue As Short
Public Alpha As Short
' Make the view brighter.
Public Sub Brighten(ByVal value As Short)
Red = CType(Math.Min(Short.MaxValue, (CType(Red, Integer) + value)), Short)
Green = CType(Math.Min(Short.MaxValue, (CType(Green, Integer) + value)), Short)
Blue = CType(Math.Min(Short.MaxValue, (CType(Blue, Integer) + value)), Short)
Alpha = CType(Math.Min(Short.MaxValue, (CType(Alpha, Integer) + value)), Short)
End Sub
End Structure
Комментарии
Сопоставленный в памяти файл сопоставляет содержимое файла с логическим адресным пространством приложения. Файлы, сопоставленные в памяти, позволяют программистам работать с очень большими файлами, так как памятью можно управлять одновременно и они обеспечивают полный случайный доступ к файлу без необходимости поиска. Сопоставленные в памяти файлы также могут совместно использоваться несколькими процессами.
Методы CreateFromFile создают файл, сопоставленный в памяти, по указанному FileStream пути или по существующему файлу на диске. Изменения автоматически распространяются на диск при отмене сопоставления файла.
Методы CreateNew создают файл, сопоставленный в памяти, который не сопоставлен с существующим файлом на диске, и подходят для создания общей памяти для межпроцессного взаимодействия (IPC).
Сопоставленный в памяти файл можно связать с необязательным именем, которое позволяет совместно использовать сопоставленный в памяти файл с другими процессами.
Можно создать несколько представлений сопоставленного в памяти файла, включая представления частей файла. Вы можете сопоставить одну и ту же часть файла с несколькими адресами, чтобы создать одновременную память. Чтобы два представления оставались согласованными, их нужно создавать из одного отображенного в память файла. Создание двух сопоставлений одного файла с двумя представлениями не обеспечивает параллелизм.
Свойства
SafeMemoryMappedFileHandle |
Возвращает дескриптор размещенного в памяти файла. |
Методы
CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, HandleInheritability, Boolean) |
Создает из существующего файла отображенный в память файл с заданными режимом доступа, именем, режимом наследования и емкостью. |
CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, MemoryMappedFileSecurity, HandleInheritability, Boolean) |
Создает из файла на диске размещенный в памяти файл с указанными именем, емкостью, типом доступа, разрешениями безопасности, режимом наследования и требованием к ликвидации. |
CreateFromFile(SafeFileHandle, String, Int64, MemoryMappedFileAccess, HandleInheritability, Boolean) |
Создает файл, сопоставленный в памяти, из существующего файла, используя и указанный SafeFileHandle режим доступа, имя, наследуемость и емкость. |
CreateFromFile(String) |
Создает размещенный в памяти файл из файла на диске. |
CreateFromFile(String, FileMode) |
Создает из файла на диске размещенный в памяти файл с заданным режимом доступа. |
CreateFromFile(String, FileMode, String) |
Создает из файла на диске размещенный в памяти файл с заданным режимом доступа и именем. |
CreateFromFile(String, FileMode, String, Int64) |
Создает из файла на диске размещенный в памяти файл с заданным режимом доступа, именем и емкостью. |
CreateFromFile(String, FileMode, String, Int64, MemoryMappedFileAccess) |
Создает из файла на диске размещенный в памяти файл с указанными режимом доступа, именем, емкостью и типом доступа. |
CreateNew(String, Int64) |
Создает размещенный в памяти файл с заданной емкостью в системной памяти. |
CreateNew(String, Int64, MemoryMappedFileAccess) |
Создает размещенный в памяти файл с заданной емкостью и типом доступа в системной памяти. |
CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability) |
Создает отображенный в память файл с заданными именем, емкостью, типом доступа, параметрами выделения памяти и режимом наследования. |
CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability) |
Создает размещенный в памяти файл с заданной емкостью, типом доступа, выделением памяти, настройками безопасности и режимом наследования в системной памяти. |
CreateOrOpen(String, Int64) |
Создает или открывает отображенный в память файл с заданным именем и емкостью в системной памяти. |
CreateOrOpen(String, Int64, MemoryMappedFileAccess) |
Создает или открывает отображенный в память файл с заданным именем, емкостью и типом доступа в системной памяти. |
CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability) |
Создает пустой отображенный в память файл или открывает существующий отображенный в память файл, если он уже существует с таким же именем. При открытии существующего файла емкость, параметры и аргументы памяти игнорируются. |
CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability) |
Создает или открывает отображенный в память файл с заданным именем, емкостью, типом доступа, выделением памяти, разрешениями безопасности и режимом наследования в системной памяти. |
CreateViewAccessor() |
Создает метод MemoryMappedViewAccessor, который соответствует представлению размещенного в памяти файла. |
CreateViewAccessor(Int64, Int64) |
Создает MemoryMappedViewAccessor, который сопоставляется с представлением размещенного в памяти файла и имеет заданное смещение и размер. |
CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess) |
Создает MemoryMappedViewAccessor, который сопоставляется с представлением размещенного в памяти файла и имеет заданное смещение, размер и ограничения по доступу. |
CreateViewStream() |
Создает поток, который соответствует представлению размещенного в памяти файла. |
CreateViewStream(Int64, Int64) |
Создает поток, который сопоставляется с представлением размещенного в памяти файла и имеет заданное смещение и размер. |
CreateViewStream(Int64, Int64, MemoryMappedFileAccess) |
Создает поток, который сопоставляется с представлением размещенного в памяти файла и имеет заданное смещение, размер и тип доступа. |
Dispose() |
Освобождает все ресурсы, занятые модулем MemoryMappedFile. |
Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые объектом MemoryMappedFile, а при необходимости освобождает также управляемые ресурсы. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetAccessControl() |
Возвращает элемент управления доступом к ресурсу размещенного в памяти файла. |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
OpenExisting(String) |
Открывает существующий размещенный в памяти файл с заданным именем в системной памяти. |
OpenExisting(String, MemoryMappedFileRights) |
Открывает существующий размещенный в памяти файл с заданными именем и правами доступа в системной памяти. |
OpenExisting(String, MemoryMappedFileRights, HandleInheritability) |
Открывает существующий размещенный в памяти файл с заданными именем, правами доступа и режимом наследования в системной памяти. |
SetAccessControl(MemoryMappedFileSecurity) |
Задает элемент управления доступом к ресурсу размещенного в памяти файла. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |