MemoryMappedFile.CreateNew メソッド

定義

システム メモリ内でメモリ マップト ファイルを作成します。

オーバーロード

CreateNew(String, Int64)

容量が指定されたメモリ マップト ファイルをシステム メモリ内で作成します。

CreateNew(String, Int64, MemoryMappedFileAccess)

容量およびアクセスの種類が指定されたメモリ マップト ファイルをシステム メモリ内で作成します。

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

名前、容量、アクセスの種類、メモリ割り当てオプション、および継承性が指定されたメモリ マップト ファイルを作成します。

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

容量、アクセスの種類、メモリの割り当て、セキュリティ アクセス許可、および継承性が指定されたメモリ マップト ファイルをシステム メモリ内で作成します。

CreateNew(String, Int64)

ソース:
MemoryMappedFile.cs
ソース:
MemoryMappedFile.cs
ソース:
MemoryMappedFile.cs

容量が指定されたメモリ マップト ファイルをシステム メモリ内で作成します。

public:
 static System::IO::MemoryMappedFiles::MemoryMappedFile ^ CreateNew(System::String ^ mapName, long capacity);
public static System.IO.MemoryMappedFiles.MemoryMappedFile CreateNew (string? mapName, long capacity);
public static System.IO.MemoryMappedFiles.MemoryMappedFile CreateNew (string mapName, long capacity);
static member CreateNew : string * int64 -> System.IO.MemoryMappedFiles.MemoryMappedFile
Public Shared Function CreateNew (mapName As String, capacity As Long) As MemoryMappedFile

パラメーター

mapName
String

メモリ マップト ファイルに割り当てる名前。または、プロセス間で共有する意図のない MemoryMappedFilenull

capacity
Int64

メモリ マップト ファイルに割り当てる最大サイズ (バイト単位)。

戻り値

名前および容量が指定されたメモリ マップト ファイル。

例外

mapName が空の文字列です。

capacity が 0 以下です。

.NET Core と .NET 5 以降のみ: 名前付きメモリ マップファイル (つまり null mapName以外) を使用したメソッドの呼び出しCreateNewは、Windows オペレーティング システムでのみサポートされています。

次の例は、メモリ マップト ファイルに値を書き込む Boolean 3 つの個別のプロセス (コンソール アプリケーション) で構成されています。 次の順序で処理が実行されます。

  1. プロセス A は、メモリ マップされたファイルを作成し、値を書き込みます。

  2. プロセス B は、メモリ マップされたファイルを開き、値を書き込みます。

  3. プロセス C は、メモリ マップされたファイルを開き、値を書き込みます。

  4. プロセス A は、メモリ マップファイルから値を読み取って表示します。

  5. プロセス A がメモリ マップド ファイルで終了すると、ファイルはガベージ コレクションによってすぐに再利用されます。

この例を実行するには、次の手順に従います。

  1. アプリケーションをコンパイルし、3 つのコマンド ウィンドウを開きます。

  2. 最初のコマンド ウィンドウで、プロセス A を実行します。

  3. 2 番目のコマンド ウィンドウで、プロセス B を実行します。

  4. プロセス A に戻り、Enter キーを押します。

  5. 3 番目のコマンド ウィンドウで、プロセス C を実行します。

  6. プロセス A に戻り、Enter キーを押します。

プロセス A の出力は次のとおりです。

Start Process B and press ENTER to continue.
Start Process C and press ENTER to continue.
Process A says: True
Process B says: False
Process C says: True

プロセス A

using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Threading;

class Program
{
    // Process A:
    static void Main(string[] args)
    {
        using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 10000))
        {
            bool mutexCreated;
            Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);
            using (MemoryMappedViewStream stream = mmf.CreateViewStream())
            {
                BinaryWriter writer = new BinaryWriter(stream);
                writer.Write(1);
            }
            mutex.ReleaseMutex();

            Console.WriteLine("Start Process B and press ENTER to continue.");
            Console.ReadLine();

            Console.WriteLine("Start Process C and press ENTER to continue.");
            Console.ReadLine();

            mutex.WaitOne();
            using (MemoryMappedViewStream stream = mmf.CreateViewStream())
            {
                BinaryReader reader = new BinaryReader(stream);
                Console.WriteLine("Process A says: {0}", reader.ReadBoolean());
                Console.WriteLine("Process B says: {0}", reader.ReadBoolean());
                Console.WriteLine("Process C says: {0}", reader.ReadBoolean());
            }
            mutex.ReleaseMutex();
        }
    }
}
Imports System.IO
Imports System.IO.MemoryMappedFiles
Imports System.Threading

Module Module1

    ' Process A:
    Sub Main()
        Using mmf As MemoryMappedFile = MemoryMappedFile.CreateNew("testmap", 10000)
            Dim mutexCreated As Boolean
            Dim mTex As Mutex = New Mutex(True, "testmapmutex", mutexCreated)
            Using Stream As MemoryMappedViewStream = mmf.CreateViewStream()
                Dim writer As BinaryWriter = New BinaryWriter(Stream)
                writer.Write(1)
            End Using
            mTex.ReleaseMutex()
            Console.WriteLine("Start Process B and press ENTER to continue.")
            Console.ReadLine()

            Console.WriteLine("Start Process C and press ENTER to continue.")
            Console.ReadLine()

            mTex.WaitOne()
            Using Stream As MemoryMappedViewStream = mmf.CreateViewStream()
                Dim reader As BinaryReader = New BinaryReader(Stream)
                Console.WriteLine("Process A says: {0}", reader.ReadBoolean())
                Console.WriteLine("Process B says: {0}", reader.ReadBoolean())
                Console.WriteLine("Process C says: {0}", reader.ReadBoolean())
            End Using
            mTex.ReleaseMutex()

        End Using

    End Sub

End Module

プロセス B

using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Threading;

class Program
{
    // Process B:
    static void Main(string[] args)
    {
        try
        {
            using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap"))
            {

                Mutex mutex = Mutex.OpenExisting("testmapmutex");
                mutex.WaitOne();

                using (MemoryMappedViewStream stream = mmf.CreateViewStream(1, 0))
                {
                    BinaryWriter writer = new BinaryWriter(stream);
                    writer.Write(0);
                }
                mutex.ReleaseMutex();
            }
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Memory-mapped file does not exist. Run Process A first.");
        }
    }
}
Imports System.IO
Imports System.IO.MemoryMappedFiles
Imports System.Threading

Module Module1
    ' Process B:
    Sub Main()
        Try
            Using mmf As MemoryMappedFile = MemoryMappedFile.OpenExisting("testmap")
                Dim mTex As Mutex = Mutex.OpenExisting("testmapmutex")
                mTex.WaitOne()
                Using Stream As MemoryMappedViewStream = mmf.CreateViewStream(1, 0)
                    Dim writer As BinaryWriter = New BinaryWriter(Stream)
                    writer.Write(0)
                End Using
                mTex.ReleaseMutex()
            End Using
        Catch noFile As FileNotFoundException
            Console.WriteLine("Memory-mapped file does not exist. Run Process A first." & vbCrLf & noFile.Message)
        End Try

    End Sub

End Module

プロセス C

using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Threading;

class Program
{
    // Process C:
    static void Main(string[] args)
    {
        try
        {
            using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap"))
            {

                Mutex mutex = Mutex.OpenExisting("testmapmutex");
                mutex.WaitOne();

                using (MemoryMappedViewStream stream = mmf.CreateViewStream(2, 0))
                {
                    BinaryWriter writer = new BinaryWriter(stream);
                    writer.Write(1);
                }
                mutex.ReleaseMutex();
            }
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Memory-mapped file does not exist. Run Process A first, then B.");
        }
    }
}
Imports System.IO
Imports System.IO.MemoryMappedFiles
Imports System.Threading

Module Module1
    ' Process C:
    Sub Main()
        Try
            Using mmf As MemoryMappedFile = MemoryMappedFile.OpenExisting("testmap")
                Dim mTex As Mutex = Mutex.OpenExisting("testmapmutex")
                mTex.WaitOne()
                Using Stream As MemoryMappedViewStream = mmf.CreateViewStream(2, 0)
                    Dim writer As BinaryWriter = New BinaryWriter(Stream)
                    writer.Write(1)
                End Using
                mTex.ReleaseMutex()
            End Using
        Catch noFile As FileNotFoundException
            Console.WriteLine("Memory-mapped file does not exist. Run Process A first, then B." & vbCrLf & noFile.Message)
        End Try

    End Sub

End Module

注釈

このメソッドを使用して、永続化されていない (つまり、ディスク上のファイルに関連付けられていない) メモリ マップファイルを作成します。これは、プロセス間でデータを共有するために使用できます。

こちらもご覧ください

適用対象

CreateNew(String, Int64, MemoryMappedFileAccess)

ソース:
MemoryMappedFile.cs
ソース:
MemoryMappedFile.cs
ソース:
MemoryMappedFile.cs

容量およびアクセスの種類が指定されたメモリ マップト ファイルをシステム メモリ内で作成します。

public:
 static System::IO::MemoryMappedFiles::MemoryMappedFile ^ CreateNew(System::String ^ mapName, long capacity, System::IO::MemoryMappedFiles::MemoryMappedFileAccess access);
public static System.IO.MemoryMappedFiles.MemoryMappedFile CreateNew (string? mapName, long capacity, System.IO.MemoryMappedFiles.MemoryMappedFileAccess access);
public static System.IO.MemoryMappedFiles.MemoryMappedFile CreateNew (string mapName, long capacity, System.IO.MemoryMappedFiles.MemoryMappedFileAccess access);
static member CreateNew : string * int64 * System.IO.MemoryMappedFiles.MemoryMappedFileAccess -> System.IO.MemoryMappedFiles.MemoryMappedFile
Public Shared Function CreateNew (mapName As String, capacity As Long, access As MemoryMappedFileAccess) As MemoryMappedFile

パラメーター

mapName
String

メモリ マップト ファイルに割り当てる名前。または、プロセス間で共有する意図のない MemoryMappedFilenull

capacity
Int64

メモリ マップト ファイルに割り当てる最大サイズ (バイト単位)。

access
MemoryMappedFileAccess

メモリ マップト ファイルに対して許可されたアクセス権の種類を指定する列挙値の 1 つ。 既定値は、ReadWrite です。

戻り値

指定された特性を持つメモリ マップト ファイル。

例外

mapName が空の文字列です。

- または -

accessWrite 列挙値で書き込み専用に設定されます。

capacity が 0 以下です。

- または -

access が有効な MemoryMappedFileAccess 列挙値ではありません。

.NET Core と .NET 5 以降のみ: 名前付きメモリ マップファイル (つまり null mapName以外) を使用したメソッドの呼び出しCreateNewは、Windows オペレーティング システムでのみサポートされています。

注釈

このメソッドを使用して、永続化されていない (つまり、ディスク上のファイルに関連付けられていない) メモリ マップファイルを作成します。これは、プロセス間でデータを共有するために使用できます。

こちらもご覧ください

適用対象

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

ソース:
MemoryMappedFile.cs
ソース:
MemoryMappedFile.cs
ソース:
MemoryMappedFile.cs

名前、容量、アクセスの種類、メモリ割り当てオプション、および継承性が指定されたメモリ マップト ファイルを作成します。

public:
 static System::IO::MemoryMappedFiles::MemoryMappedFile ^ CreateNew(System::String ^ mapName, long capacity, System::IO::MemoryMappedFiles::MemoryMappedFileAccess access, System::IO::MemoryMappedFiles::MemoryMappedFileOptions options, System::IO::HandleInheritability inheritability);
public static System.IO.MemoryMappedFiles.MemoryMappedFile CreateNew (string? mapName, long capacity, System.IO.MemoryMappedFiles.MemoryMappedFileAccess access, System.IO.MemoryMappedFiles.MemoryMappedFileOptions options, System.IO.HandleInheritability inheritability);
public static System.IO.MemoryMappedFiles.MemoryMappedFile CreateNew (string mapName, long capacity, System.IO.MemoryMappedFiles.MemoryMappedFileAccess access, System.IO.MemoryMappedFiles.MemoryMappedFileOptions options, System.IO.HandleInheritability inheritability);
static member CreateNew : string * int64 * System.IO.MemoryMappedFiles.MemoryMappedFileAccess * System.IO.MemoryMappedFiles.MemoryMappedFileOptions * System.IO.HandleInheritability -> System.IO.MemoryMappedFiles.MemoryMappedFile
Public Shared Function CreateNew (mapName As String, capacity As Long, access As MemoryMappedFileAccess, options As MemoryMappedFileOptions, inheritability As HandleInheritability) As MemoryMappedFile

パラメーター

mapName
String

メモリ マップト ファイルに割り当てる名前。または、プロセス間で共有する意図のない MemoryMappedFilenull

capacity
Int64

メモリ マップト ファイルに割り当てる最大サイズ (バイト単位)。

access
MemoryMappedFileAccess

メモリ マップト ファイルに対して許可されたアクセス権の種類を指定する列挙値の 1 つ。 既定値は、ReadWrite です。

options
MemoryMappedFileOptions

メモリ マップト ファイルのメモリ割り当てオプションを指定する列挙値のビットごとの組み合わせ。

inheritability
HandleInheritability

メモリ マップト ファイルへのハンドルを子プロセスが継承できるかどうかを指定する値。 既定値は、None です。

戻り値

指定された特性を持つメモリ マップト ファイル。

例外

mapName が空の文字列です。

- または -

accessWrite 列挙値で書き込み専用に設定されます。

capacity が 0 以下です。

- または -

access が有効な MemoryMappedFileAccess 列挙値ではありません。

- または -

inheritability は有効な HandleInheritability 値ではありません。

.NET Core と .NET 5 以降のみ: 名前付きメモリ マップファイル (つまり null mapName以外) を使用したメソッドの呼び出しCreateNewは、Windows オペレーティング システムでのみサポートされています。

適用対象

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

容量、アクセスの種類、メモリの割り当て、セキュリティ アクセス許可、および継承性が指定されたメモリ マップト ファイルをシステム メモリ内で作成します。

public:
 static System::IO::MemoryMappedFiles::MemoryMappedFile ^ CreateNew(System::String ^ mapName, long capacity, System::IO::MemoryMappedFiles::MemoryMappedFileAccess access, System::IO::MemoryMappedFiles::MemoryMappedFileOptions options, System::IO::MemoryMappedFiles::MemoryMappedFileSecurity ^ memoryMappedFileSecurity, System::IO::HandleInheritability inheritability);
[System.Security.SecurityCritical]
public static System.IO.MemoryMappedFiles.MemoryMappedFile CreateNew (string mapName, long capacity, System.IO.MemoryMappedFiles.MemoryMappedFileAccess access, System.IO.MemoryMappedFiles.MemoryMappedFileOptions options, System.IO.MemoryMappedFiles.MemoryMappedFileSecurity memoryMappedFileSecurity, System.IO.HandleInheritability inheritability);
[<System.Security.SecurityCritical>]
static member CreateNew : string * int64 * System.IO.MemoryMappedFiles.MemoryMappedFileAccess * System.IO.MemoryMappedFiles.MemoryMappedFileOptions * System.IO.MemoryMappedFiles.MemoryMappedFileSecurity * System.IO.HandleInheritability -> System.IO.MemoryMappedFiles.MemoryMappedFile
Public Shared Function CreateNew (mapName As String, capacity As Long, access As MemoryMappedFileAccess, options As MemoryMappedFileOptions, memoryMappedFileSecurity As MemoryMappedFileSecurity, inheritability As HandleInheritability) As MemoryMappedFile

パラメーター

mapName
String

メモリ マップト ファイルに割り当てる名前。または、プロセス間で共有する意図のない MemoryMappedFilenull

capacity
Int64

メモリ マップト ファイルに割り当てる最大サイズ (バイト単位)。

access
MemoryMappedFileAccess

メモリ マップト ファイルに対して許可されたアクセス権の種類を指定する列挙値の 1 つ。 既定値は、ReadWrite です。

options
MemoryMappedFileOptions

メモリ マップト ファイルのメモリ割り当てオプションを指定する列挙値のビットごとの組み合わせ。

memoryMappedFileSecurity
MemoryMappedFileSecurity

メモリ マップト ファイルに対するファイル アクセスと操作に関して付与することのできるアクセス許可。

このパラメーターは、null に設定できます。

inheritability
HandleInheritability

メモリ マップト ファイルへのハンドルを子プロセスが継承できるかどうかを指定する列挙値の 1 つ。 既定値は、None です。

戻り値

指定された特性を持つメモリ マップト ファイル。

属性

例外

mapName が空の文字列です。

- または -

accessWrite 列挙値で書き込み専用に設定されます。

capacity が 0 以下です。

- または -

access が有効な MemoryMappedFileAccess 列挙値ではありません。

- または -

inheritability が有効な HandleInheritability 列挙値ではありません。

注釈

このメソッドを使用して、永続化されていない (つまり、ディスク上のファイルに関連付けられていない) メモリ マップファイルを作成します。これは、プロセス間でデータを共有するために使用できます。

こちらもご覧ください

適用対象