MemoryMappedFile クラス
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
メモリ マップト ファイルを表します。
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) 用の共有メモリを作成するのに適しています。
メモリ マップファイルは、メモリマップファイルを他のプロセスと共有できるようにする省略可能な名前に関連付けることができます。
メモリ マップされたファイルの複数のビュー (ファイルの一部のビューを含む) を作成できます。 ファイルの同じ部分を複数のアドレスにマップして、同時実行メモリを作成できます。 2 つのビューが同時実行されるには、それらのビューを同じメモリ マップト ファイルから作成する必要があります。 同じファイルの 2 つのファイル マッピングを 2 つのビューで作成しても、コンカレンシーは提供されません。
Safe |
メモリ マップト ファイルのファイル ハンドルを取得します。 |
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。