MemoryMappedFile.CreateNew Metodo

Definizione

Crea un file mappato alla memoria in memoria.

Overload

Nome Descrizione
CreateNew(String, Int64)

Crea un file mappato alla memoria con la capacità specificata nella memoria di sistema.

CreateNew(String, Int64, MemoryMappedFileAccess)

Crea un file mappato alla memoria con la capacità e il tipo di accesso specificati nella memoria di sistema.

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

Crea un file mappato alla memoria con il nome, la capacità, il tipo di accesso, le opzioni di allocazione della memoria e l'ereditarietà specificati.

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

Crea un file mappato alla memoria con la capacità specificata, il tipo di accesso, l'allocazione della memoria, le autorizzazioni di sicurezza e l'ereditarietà nella memoria di sistema.

CreateNew(String, Int64)

Crea un file mappato alla memoria con la capacità specificata nella memoria di sistema.

public:
 static System::IO::MemoryMappedFiles::MemoryMappedFile ^ CreateNew(System::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

Parametri

mapName
String

Nome da assegnare al file mappato alla memoria o null per un MemoryMappedFile oggetto che non si intende condividere tra processi.

capacity
Int64

Dimensione massima, in byte, da allocare al file mappato alla memoria.

Valori restituiti

File mappato alla memoria con il nome e la capacità specificati.

Eccezioni

mapName è una stringa vuota.

capacity è minore o uguale a zero.

solo .NET Core e .NET 5+: le chiamate al metodo CreateNew con un file mappato alla memoria denominato (ovvero un mapName non Null) sono supportate solo nei sistemi operativi Windows.

Esempio

L'esempio seguente è costituito da tre processi separati (applicazioni console) che scrivono Boolean valori in un file mappato alla memoria. Si verifica la sequenza di azioni seguente:

  1. Il processo A crea il file mappato alla memoria e ne scrive un valore.
  2. Il processo B apre il file mappato alla memoria e ne scrive un valore.
  3. Il processo C apre il file mappato alla memoria e ne scrive un valore.
  4. Elabora A legge e visualizza i valori del file mappato alla memoria.
  5. Al termine del processo A con il file mappato alla memoria, il file viene immediatamente recuperato da Garbage Collection.

Per eseguire questo esempio, eseguire le operazioni seguenti:

  1. Compilare le applicazioni e aprire tre finestre di comando.
  2. Nella prima finestra di comando eseguire Process A.
  3. Nella seconda finestra comando eseguire Processo B.
  4. Tornare al processo A e premere INVIO.
  5. Nella terza finestra comando eseguire Process C.
  6. Tornare al processo A e premere INVIO.

L'output del processo A è il seguente:

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

Processo 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

Processo 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

Processo 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

Commenti

Usare questo metodo per creare un file mappato alla memoria che non è persistente( ovvero non associato a un file su disco), che è possibile usare per condividere i dati tra processi.

Vedi anche

Si applica a

CreateNew(String, Int64, MemoryMappedFileAccess)

Crea un file mappato alla memoria con la capacità e il tipo di accesso specificati nella memoria di sistema.

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

Parametri

mapName
String

Nome da assegnare al file mappato alla memoria o null per un MemoryMappedFile oggetto che non si intende condividere tra processi.

capacity
Int64

Dimensione massima, in byte, da allocare al file mappato alla memoria.

access
MemoryMappedFileAccess

Uno dei valori di enumerazione che specifica il tipo di accesso consentito al file mappato alla memoria. Il valore predefinito è ReadWrite.

Valori restituiti

File mappato alla memoria con le caratteristiche specificate.

Eccezioni

mapName è una stringa vuota.

oppure

access è impostato su write-only con il valore di Write enumerazione .

capacity è minore o uguale a zero.

oppure

access non è un valore di enumerazione valido MemoryMappedFileAccess .

solo .NET Core e .NET 5+: le chiamate al metodo CreateNew con un file mappato alla memoria denominato (ovvero un mapName non Null) sono supportate solo nei sistemi operativi Windows.

Commenti

Usare questo metodo per creare un file mappato alla memoria che non è persistente( ovvero non associato a un file su disco), che è possibile usare per condividere i dati tra processi.

Vedi anche

Si applica a

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

Crea un file mappato alla memoria con il nome, la capacità, il tipo di accesso, le opzioni di allocazione della memoria e l'ereditarietà specificati.

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

Parametri

mapName
String

Nome da assegnare al file mappato alla memoria o null per un MemoryMappedFile oggetto che non si intende condividere tra processi.

capacity
Int64

Dimensione massima, in byte, da allocare al file mappato alla memoria.

access
MemoryMappedFileAccess

Uno dei valori di enumerazione che specifica il tipo di accesso consentito al file mappato alla memoria. Il valore predefinito è ReadWrite.

options
MemoryMappedFileOptions

Combinazione bit per bit di valori di enumerazione che specifica le opzioni di allocazione della memoria per il file mappato alla memoria.

inheritability
HandleInheritability

Valore che specifica se un handle per il file mappato alla memoria può essere ereditato da un processo figlio. Il valore predefinito è None.

Valori restituiti

File mappato alla memoria con le caratteristiche specificate.

Eccezioni

mapName è una stringa vuota.

oppure

access è impostato su write-only con il valore di Write enumerazione .

capacity è minore o uguale a zero.

oppure

access non è un valore di enumerazione valido MemoryMappedFileAccess .

oppure

inheritability non è un valore valido HandleInheritability .

solo .NET Core e .NET 5+: le chiamate al metodo CreateNew con un file mappato alla memoria denominato (ovvero un mapName non Null) sono supportate solo nei sistemi operativi Windows.

Si applica a

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

Crea un file mappato alla memoria con la capacità specificata, il tipo di accesso, l'allocazione della memoria, le autorizzazioni di sicurezza e l'ereditarietà nella memoria di sistema.

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

Parametri

mapName
String

Nome da assegnare al file mappato alla memoria o null per un MemoryMappedFile oggetto che non si intende condividere tra processi.

capacity
Int64

Dimensione massima, in byte, da allocare al file mappato alla memoria.

access
MemoryMappedFileAccess

Uno dei valori di enumerazione che specifica il tipo di accesso consentito al file mappato alla memoria. Il valore predefinito è ReadWrite.

options
MemoryMappedFileOptions

Combinazione bit per bit di valori di enumerazione che specifica le opzioni di allocazione della memoria per il file mappato alla memoria.

memoryMappedFileSecurity
MemoryMappedFileSecurity

Autorizzazioni che possono essere concesse per l'accesso ai file e le operazioni sui file mappati alla memoria.

Questo parametro può essere null.

inheritability
HandleInheritability

Uno dei valori di enumerazione che specifica se un handle per il file mappato alla memoria può essere ereditato da un processo figlio. Il valore predefinito è None.

Valori restituiti

File mappato alla memoria con le caratteristiche specificate.

Attributi

Eccezioni

mapName è una stringa vuota.

oppure

access è impostato su write-only con il valore di Write enumerazione .

capacity è minore o uguale a zero.

oppure

access non è un valore di enumerazione valido MemoryMappedFileAccess .

oppure

inheritability non è un valore di enumerazione valido HandleInheritability .

Commenti

Usare questo metodo per creare un file mappato alla memoria che non è persistente( ovvero non associato a un file su disco), che è possibile usare per condividere i dati tra processi.

Vedi anche

Si applica a