MemoryMappedFile.CreateNew Methode

Definition

Erstellt eine Speicherabbilddatei im Systemspeicher.

Überlädt

CreateNew(String, Int64)

Erstellt eine im Speicher abgebildete Datei mit der angegebenen Kapazität im Systemspeicher.

CreateNew(String, Int64, MemoryMappedFileAccess)

Erstellt eine im Speicher abgebildete Datei mit den angegebenen Werten für Kapazität und Zugriffstyp im Systemspeicher.

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

Erstellt eine im Speicher abgebildete Datei mit den angegebenen Werten für Name, Kapazität, Zugriffstyp, Speicherbelegung und Vererbbarkeit.

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

Erstellt eine im Speicher abgebildete Datei mit den angegebenen Werten für Kapazität, Zugriffstyp, Speicherbelegung, Sicherheitsberechtigungen und Vererbbarkeit im Systemspeicher.

CreateNew(String, Int64)

Erstellt eine im Speicher abgebildete Datei mit der angegebenen Kapazität im Systemspeicher.

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

Parameter

mapName
String

Ein Name, der der im Speicher abgebildeten Datei zugewiesen werden soll, oder null für eine MemoryMappedFile, die Sie nicht für mehrere Vorgänge freigeben möchten.

capacity
Int64

Die maximale Größe (in Bytes), die für die Speicherabbilddatei reserviert werden soll.

Gibt zurück

MemoryMappedFile

Eine im Speicher abgebildete Datei mit den angegebenen Werten für Name und Kapazität.

Ausnahmen

mapName ist eine leere Zeichenfolge.

capacity ist kleiner oder gleich 0 (null).

.NET Core und .NET 5+ nur: Aufrufe an die CreateNew-Methode mit einer benannten Speicherzuordnungsdatei (d. h. nicht nullmapName) werden nur auf Windows Betriebssystemen unterstützt.

Beispiele

Das folgende Beispiel besteht aus drei separate Prozesse (konsolenanwendungen) auf, die schreiben Boolean Werte für eine Speicherabbilddatei. Die folgende Sequenz von Aktionen wird ausgeführt:

  1. Prozess A erstellt die Speicherzuordnungsdatei und schreibt einen Wert darauf.

  2. Prozess B öffnet die Speicherzuordnungsdatei und schreibt einen Wert darauf.

  3. Prozess C öffnet die Speicherzuordnungsdatei und schreibt einen Wert darauf.

  4. Prozess A liest und zeigt die Werte aus der speicherzuordnungen Datei an.

  5. Nachdem Die Datei "Process A" mit der speicherzuordnungen Datei abgeschlossen ist, wird die Datei sofort von der Garbage Collection zurückgefordert.

Gehen Sie folgendermaßen vor, um dieses Beispiel auszuführen:

  1. Kompilieren Sie die Anwendungen, und öffnen Sie drei Befehlsfenster.

  2. Führen Sie im ersten Befehlsfenster "Prozess A" aus.

  3. Führen Sie im zweiten Befehlsfenster Prozess B aus.

  4. Kehren Sie zu "Prozess A" zurück, und drücken Sie die EINGABETASTE.

  5. Führen Sie im dritten Befehlsfenster Prozess C aus.

  6. Kehren Sie zu "Prozess A" zurück, und drücken Sie die EINGABETASTE.

Die Ausgabe von Process A lautet wie folgt:

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  

Prozess 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

Prozess 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

Prozess 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

Hinweise

Verwenden Sie diese Methode, um eine Speicherzuordnungsdatei zu erstellen, die nicht beibehalten wird (also nicht mit einer Datei auf dem Datenträger verknüpft), mit der Sie Daten zwischen Prozessen freigeben können.

Siehe auch

Gilt für:

CreateNew(String, Int64, MemoryMappedFileAccess)

Erstellt eine im Speicher abgebildete Datei mit den angegebenen Werten für Kapazität und Zugriffstyp im Systemspeicher.

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

Parameter

mapName
String

Ein Name, der der im Speicher abgebildeten Datei zugewiesen werden soll, oder null für eine MemoryMappedFile, die Sie nicht für mehrere Vorgänge freigeben möchten.

capacity
Int64

Die maximale Größe (in Bytes), die für die Speicherabbilddatei reserviert werden soll.

access
MemoryMappedFileAccess

Einer der Enumerationswerte, der den zulässigen Zugriffstyp für die Speicherabbilddatei angibt. Der Standardwert ist ReadWrite.

Gibt zurück

MemoryMappedFile

Eine Speicherabbilddatei, die die angegebenen Merkmale aufweist.

Ausnahmen

mapName ist eine leere Zeichenfolge.

- oder - access ist mit dem Write-Enumerationswert auf „Nur Schreibzugriff“ festgelegt.

capacity ist kleiner oder gleich 0 (null).

- oder - access ist kein gültiger MemoryMappedFileAccess-Enumerationswert.

.NET Core und .NET 5+ nur: Aufrufe an die CreateNew-Methode mit einer benannten Speicherzuordnungsdatei (d. h. nicht nullmapName) werden nur auf Windows Betriebssystemen unterstützt.

Hinweise

Verwenden Sie diese Methode, um eine Speicherzuordnungsdatei zu erstellen, die nicht beibehalten wird (also nicht mit einer Datei auf dem Datenträger verknüpft), mit der Sie Daten zwischen Prozessen freigeben können.

Siehe auch

Gilt für:

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

Erstellt eine im Speicher abgebildete Datei mit den angegebenen Werten für Name, Kapazität, Zugriffstyp, Speicherbelegung und Vererbbarkeit.

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

Parameter

mapName
String

Ein Name, der der im Speicher abgebildeten Datei zugewiesen werden soll, oder null für eine MemoryMappedFile, die Sie nicht für mehrere Vorgänge freigeben möchten.

capacity
Int64

Die maximale Größe (in Bytes), die für die Speicherabbilddatei reserviert werden soll.

access
MemoryMappedFileAccess

Einer der Enumerationswerte, der den zulässigen Zugriffstyp für die Speicherabbilddatei angibt. Der Standardwert ist ReadWrite.

options
MemoryMappedFileOptions

Eine bitweise Kombination von Enumerationswerten, die Speicherbelegungsoptionen für die Speicherabbilddatei angeben.

inheritability
HandleInheritability

Ein Wert, der angibt, ob ein Handle auf die Speicherabbilddatei von einem untergeordneten Prozess geerbt werden kann. Der Standardwert ist None.

Gibt zurück

MemoryMappedFile

Eine Speicherabbilddatei, die die angegebenen Merkmale aufweist.

Ausnahmen

mapName ist eine leere Zeichenfolge.

- oder - access ist mit dem Write-Enumerationswert auf „Nur Schreibzugriff“ festgelegt.

capacity ist kleiner oder gleich 0 (null).

- oder - access ist kein gültiger MemoryMappedFileAccess-Enumerationswert.

.NET Core und .NET 5+ nur: Aufrufe an die CreateNew-Methode mit einer benannten Speicherzuordnungsdatei (d. h. nicht nullmapName) werden nur auf Windows Betriebssystemen unterstützt.

Gilt für:

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

Erstellt eine im Speicher abgebildete Datei mit den angegebenen Werten für Kapazität, Zugriffstyp, Speicherbelegung, Sicherheitsberechtigungen und Vererbbarkeit im Systemspeicher.

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);
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
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

Parameter

mapName
String

Ein Name, der der im Speicher abgebildeten Datei zugewiesen werden soll, oder null für eine MemoryMappedFile, die Sie nicht für mehrere Vorgänge freigeben möchten.

capacity
Int64

Die maximale Größe (in Bytes), die für die Speicherabbilddatei reserviert werden soll.

access
MemoryMappedFileAccess

Einer der Enumerationswerte, der den zulässigen Zugriffstyp für die Speicherabbilddatei angibt. Der Standardwert ist ReadWrite.

options
MemoryMappedFileOptions

Eine bitweise Kombination von Enumerationswerten, die Speicherbelegungsoptionen für die Speicherabbilddatei angeben.

memoryMappedFileSecurity
MemoryMappedFileSecurity

Die Berechtigungen, die für den Dateizugriff und für Vorgänge für Speicherabbilddateien gewährt werden können.

Dieser Parameter kann null sein.

inheritability
HandleInheritability

Einer der Enumerationswerte, der angibt, ob ein Handle auf die Speicherabbilddatei von einem untergeordneten Prozess geerbt werden kann. Der Standardwert ist None.

Gibt zurück

MemoryMappedFile

Eine Speicherabbilddatei, die die angegebenen Merkmale aufweist.

Attribute

Ausnahmen

mapName ist eine leere Zeichenfolge.

- oder - access ist mit dem Write-Enumerationswert auf „Nur Schreibzugriff“ festgelegt.

capacity ist kleiner oder gleich 0 (null).

- oder - access ist kein gültiger MemoryMappedFileAccess-Enumerationswert.

- oder - inheritability ist kein gültiger HandleInheritability-Enumerationswert.

Hinweise

Verwenden Sie diese Methode, um eine Speicherzuordnungsdatei zu erstellen, die nicht beibehalten wird (also nicht mit einer Datei auf dem Datenträger verknüpft), mit der Sie Daten zwischen Prozessen freigeben können.

Siehe auch

Gilt für: