Freigeben über


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)

Quelle:
MemoryMappedFile.cs
Quelle:
MemoryMappedFile.cs
Quelle:
MemoryMappedFile.cs

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

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

Nur .NET Core und .NET 5 und höher: Aufrufe der CreateNew -Methode mit einer benannten Speicherzuordnungsdatei (d. h. nicht NULL mapName) werden nur unter 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 im Arbeitsspeicher zugeordnete Datei und schreibt einen Wert in sie.

  2. Prozess B öffnet die im Arbeitsspeicher zugeordnete Datei und schreibt einen Wert in die Datei.

  3. Prozess C öffnet die im Speicher zugeordnete Datei und schreibt einen Wert in sie.

  4. Process A liest und zeigt die Werte aus der speicherabbildeten Datei an.

  5. Nachdem Prozess A mit der Speicherzuordnungsdatei abgeschlossen wurde, wird die Datei sofort von der Garbage Collection wieder freigegeben.

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 Prozess 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 im Speicher zugeordnete Datei zu erstellen, die nicht beibehalten wird (d. h. nicht einer Datei auf dem Datenträger zugeordnet ist), die Sie zum Freigeben von Daten zwischen Prozessen verwenden können.

Weitere Informationen

Gilt für:

CreateNew(String, Int64, MemoryMappedFileAccess)

Quelle:
MemoryMappedFile.cs
Quelle:
MemoryMappedFile.cs
Quelle:
MemoryMappedFile.cs

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

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.

Nur .NET Core und .NET 5 und höher: Aufrufe der CreateNew -Methode mit einer benannten Speicherzuordnungsdatei (d. h. nicht NULL mapName) werden nur unter Windows-Betriebssystemen unterstützt.

Hinweise

Verwenden Sie diese Methode, um eine im Speicher zugeordnete Datei zu erstellen, die nicht beibehalten wird (d. h. nicht einer Datei auf dem Datenträger zugeordnet ist), die Sie zum Freigeben von Daten zwischen Prozessen verwenden können.

Weitere Informationen

Gilt für:

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

Quelle:
MemoryMappedFile.cs
Quelle:
MemoryMappedFile.cs
Quelle:
MemoryMappedFile.cs

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

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.

- oder -

inheritability ist kein gültiger HandleInheritability -Wert.

Nur .NET Core und .NET 5 und höher: Aufrufe der CreateNew -Methode mit einer benannten Speicherzuordnungsdatei (d. h. nicht NULL mapName) werden nur unter 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);
[<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

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

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 im Speicher zugeordnete Datei zu erstellen, die nicht beibehalten wird (d. h. nicht einer Datei auf dem Datenträger zugeordnet ist), die Sie zum Freigeben von Daten zwischen Prozessen verwenden können.

Weitere Informationen

Gilt für: