View Memory Mapped Files

Posted onby

Memory-mapped files work the other way round. Memory-mapping isn't a property of the file, but a way to access the file: a process can map a file's contents (or a subset thereof) into its address space.

  • A memory mapped view stream is a stream over a memory mapped view. It does not provide a stream on the whole file, but just the part that you map. You will still need to map the file in chunks to read the whole thing. Unless you really need shared memory you are probably just better off with reading the file in.
  • Memory-mapped files enable programmers to work with extremely large files because memory can be managed concurrently, and they allow complete, random access to a file without the need for seeking. Memory-mapped files can also be shared across multiple processes.
  • Files are already memory-mapped by design, the file system cache takes care of it. Doing it again is a bad idea, especially for such a huge view. The RAM needed to map the view will be taken away from the RAM used by the file system cache, in effect making it much less effective.
-->

Definition

Files
Inheritance
MemoryMappedFileMemoryMappedFileMemoryMappedFileMemoryMappedFile
Implements
IDisposableIDisposableIDisposableIDisposable

Memory Mapped File

Examples

Memory Mapped File Windows

The following example creates a memory-mapped view of a part of an extremely large file and manipulates a portion of it.

Remarks

A memory-mapped file maps the contents of a file to an application's logical address space. Memory-mapped files enable programmers to work with extremely large files because memory can be managed concurrently, and they allow complete, random access to a file without the need for seeking. Memory-mapped files can also be shared across multiple processes.

The CreateFromFile methods create a memory-mapped file from a specified path or a FileStream of an existing file on disk. Changes are automatically propagated to disk when the file is unmapped.

The CreateNew methods create a memory-mapped file that is not mapped to an existing file on disk; and are suitable for creating shared memory for interprocess communication (IPC).

A memory-mapped file can be associated with an optional name that allows the memory-mapped file to be shared with other processes.

You can create multiple views of the memory-mapped file, including views of parts of the file. You can map the same part of a file to more than one address to create concurrent memory. For two views to remain concurrent, they have to be created from the same memory-mapped file. Creating two file mappings of the same file with two views does not provide concurrency.

Windows Memory Mapped Files

Properties

SafeMemoryMappedFileHandleSafeMemoryMappedFileHandleSafeMemoryMappedFileHandleSafeMemoryMappedFileHandle

Gets the file handle of a memory-mapped file.

Methods

CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, HandleInheritability, Boolean)CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, HandleInheritability, Boolean)CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, HandleInheritability, Boolean)CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, HandleInheritability, Boolean)

Creates a memory-mapped file from an existing file with the specified access mode, name, inheritability, and capacity.

CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, MemoryMappedFileSecurity, HandleInheritability, Boolean)CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, MemoryMappedFileSecurity, HandleInheritability, Boolean)CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, MemoryMappedFileSecurity, HandleInheritability, Boolean)CreateFromFile(FileStream, String, Int64, MemoryMappedFileAccess, MemoryMappedFileSecurity, HandleInheritability, Boolean)

Creates a memory-mapped file that has the specified name, capacity, access type, security permissions, inheritability, and disposal requirement from a file on disk.

CreateFromFile(String)CreateFromFile(String)CreateFromFile(String)CreateFromFile(String)

Creates a memory-mapped file from a file on disk.

CreateFromFile(String, FileMode)CreateFromFile(String, FileMode)CreateFromFile(String, FileMode)CreateFromFile(String, FileMode)

Creates a memory-mapped file that has the specified access mode from a file on disk.

CreateFromFile(String, FileMode, String)CreateFromFile(String, FileMode, String)CreateFromFile(String, FileMode, String)CreateFromFile(String, FileMode, String)

Creates a memory-mapped file that has the specified access mode and name from a file on disk.

CreateFromFile(String, FileMode, String, Int64)CreateFromFile(String, FileMode, String, Int64)CreateFromFile(String, FileMode, String, Int64)CreateFromFile(String, FileMode, String, Int64)

Creates a memory-mapped file that has the specified access mode, name, and capacity from a file on disk.

CreateFromFile(String, FileMode, String, Int64, MemoryMappedFileAccess)CreateFromFile(String, FileMode, String, Int64, MemoryMappedFileAccess)CreateFromFile(String, FileMode, String, Int64, MemoryMappedFileAccess)CreateFromFile(String, FileMode, String, Int64, MemoryMappedFileAccess)

Creates a memory-mapped file that has the specified access mode, name, capacity, and access type from a file on disk.

CreateNew(String, Int64)CreateNew(String, Int64)CreateNew(String, Int64)CreateNew(String, Int64)

Creates a memory-mapped file that has the specified capacity in system memory.

CreateNew(String, Int64, MemoryMappedFileAccess)CreateNew(String, Int64, MemoryMappedFileAccess)CreateNew(String, Int64, MemoryMappedFileAccess)CreateNew(String, Int64, MemoryMappedFileAccess)

Creates a memory-mapped file that has the specified capacity and access type in system memory.

CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)

Creates a memory-mapped file that has the specified name, capacity, access type, memory allocation options and inheritability.

CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)

Creates a memory-mapped file that has the specified capacity, access type, memory allocation, security permissions, and inheritability in system memory.

CreateOrOpen(String, Int64)CreateOrOpen(String, Int64)CreateOrOpen(String, Int64)CreateOrOpen(String, Int64)

Creates or opens a memory-mapped file that has the specified name and capacity in system memory.

CreateOrOpen(String, Int64, MemoryMappedFileAccess)CreateOrOpen(String, Int64, MemoryMappedFileAccess)CreateOrOpen(String, Int64, MemoryMappedFileAccess)CreateOrOpen(String, Int64, MemoryMappedFileAccess)

Creates or opens a memory-mapped file that has the specified name, capacity and access type in system memory.

CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability)

Creates a new empty memory mapped file or opens an existing memory mapped file if one exists with the same name. If opening an existing file, the capacity, options, and memory arguments will be ignored.

CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)CreateOrOpen(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability)

Creates or opens a memory-mapped file that has the specified name, capacity, access type, memory allocation, security permissions, and inheritability in system memory.

CreateViewAccessor()CreateViewAccessor()CreateViewAccessor()CreateViewAccessor()

Creates a MemoryMappedViewAccessor that maps to a view of the memory-mapped file.

CreateViewAccessor(Int64, Int64)CreateViewAccessor(Int64, Int64)CreateViewAccessor(Int64, Int64)CreateViewAccessor(Int64, Int64)

Creates a MemoryMappedViewAccessor that maps to a view of the memory-mapped file, and that has the specified offset and size.

CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess)CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess)CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess)CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess)

Creates a MemoryMappedViewAccessor that maps to a view of the memory-mapped file, and that has the specified offset, size, and access restrictions.

CreateViewStream()CreateViewStream()CreateViewStream()CreateViewStream()

Creates a stream that maps to a view of the memory-mapped file.

CreateViewStream(Int64, Int64)CreateViewStream(Int64, Int64)CreateViewStream(Int64, Int64)CreateViewStream(Int64, Int64)

Creates a stream that maps to a view of the memory-mapped file, and that has the specified offset and size.

CreateViewStream(Int64, Int64, MemoryMappedFileAccess)CreateViewStream(Int64, Int64, MemoryMappedFileAccess)CreateViewStream(Int64, Int64, MemoryMappedFileAccess)CreateViewStream(Int64, Int64, MemoryMappedFileAccess)

Creates a stream that maps to a view of the memory-mapped file, and that has the specified offset, size, and access type.

Dispose()Dispose()Dispose()Dispose()

Releases all resources used by the MemoryMappedFile.

Dispose(Boolean)Dispose(Boolean)Dispose(Boolean)Dispose(Boolean)

Releases the unmanaged resources used by the MemoryMappedFile and optionally releases the managed resources.

Equals(Object)Equals(Object)Equals(Object)Equals(Object)

Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetAccessControl()GetAccessControl()GetAccessControl()GetAccessControl()

Gets the access control to the memory-mapped file resource.

GetHashCode()GetHashCode()GetHashCode()GetHashCode()

Serves as the default hash function.

(Inherited from Object)
GetType()GetType()GetType()GetType()

Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone()MemberwiseClone()MemberwiseClone()MemberwiseClone()

Creates a shallow copy of the current Object.

(Inherited from Object)
OpenExisting(String)OpenExisting(String)OpenExisting(String)OpenExisting(String)

Opens an existing memory-mapped file that has the specified name in system memory.

OpenExisting(String, MemoryMappedFileRights)OpenExisting(String, MemoryMappedFileRights)OpenExisting(String, MemoryMappedFileRights)OpenExisting(String, MemoryMappedFileRights)

Opens an existing memory-mapped file that has the specified name and access rights in system memory.

OpenExisting(String, MemoryMappedFileRights, HandleInheritability)OpenExisting(String, MemoryMappedFileRights, HandleInheritability)OpenExisting(String, MemoryMappedFileRights, HandleInheritability)OpenExisting(String, MemoryMappedFileRights, HandleInheritability)

Opens an existing memory-mapped file that has the specified name, access rights, and inheritability in system memory.

SetAccessControl(MemoryMappedFileSecurity)SetAccessControl(MemoryMappedFileSecurity)SetAccessControl(MemoryMappedFileSecurity)SetAccessControl(MemoryMappedFileSecurity)

Sets the access control to the memory-mapped file resource.

ToString()ToString()ToString()ToString()

Returns a string that represents the current object.

(Inherited from Object)

Applies to

See also