Partilhar via


MemoryMappedFile.CreateNew Método

Definição

Cria um arquivo mapeado em memória na memória do sistema.

Sobrecargas

CreateNew(String, Int64)

Cria um arquivo mapeado em memória que tem a capacidade especificada na memória do sistema.

CreateNew(String, Int64, MemoryMappedFileAccess)

Cria um arquivo mapeado em memória que tem a capacidade e tipo de acesso especificados na memória do sistema.

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

Cria um arquivo mapeado em memória que tem o nome, a capacidade, o tipo de acesso, as opções de alocação de memória e a capacidade de herança especificados.

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

Cria um arquivo mapeado em memória que tem a capacidade, o tipo de acesso, a alocação de memória, as permissões de segurança e a herdabilidade especificadas na memória do sistema.

CreateNew(String, Int64)

Origem:
MemoryMappedFile.cs
Origem:
MemoryMappedFile.cs
Origem:
MemoryMappedFile.cs

Cria um arquivo mapeado em memória que tem a capacidade especificada na memória do sistema.

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

Parâmetros

mapName
String

Um nome a ser atribuído ao arquivo mapeado em memória, ou null para um MemoryMappedFile que você não pretende compartilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a ser alocado para o arquivo mapeado em memória.

Retornos

Um arquivo mapeado em memória que tem o nome e a capacidade especificados.

Exceções

mapName é uma cadeia de caracteres vazia.

capacity é menor que ou igual a zero.

Somente .NET Core e .NET 5+: as chamadas para o CreateNew método com um arquivo mapeado de memória nomeada (ou seja, um não nulo mapName) têm suporte apenas em sistemas operacionais Windows.

Exemplos

O exemplo a seguir é composto por três processos separados (aplicativos de console) que gravam Boolean valores em um arquivo mapeado em memória. Ocorre a seguinte sequência de ações:

  1. O processo A cria o arquivo mapeado na memória e grava um valor nele.

  2. O processo B abre o arquivo mapeado na memória e grava um valor nele.

  3. O processo C abre o arquivo mapeado na memória e grava um valor nele.

  4. O Processo A lê e exibe os valores do arquivo mapeado na memória.

  5. Depois que o Processo A for concluído com o arquivo mapeado na memória, o arquivo será recuperado imediatamente pela coleta de lixo.

Para executar este exemplo, faça o seguinte:

  1. Compile os aplicativos e abra três janelas de comando.

  2. Na primeira janela Comando, execute o Processo A.

  3. Na segunda janela Comando, execute o Processo B.

  4. Retorne ao Processo A e pressione ENTER.

  5. Na terceira janela Comando, execute o Processo C.

  6. Retorne ao Processo A e pressione ENTER.

A saída do Processo A é a seguinte:

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

Comentários

Use esse método para criar um arquivo mapeado na memória que não é persistente (ou seja, não associado a um arquivo em disco), que pode ser usado para compartilhar dados entre processos.

Confira também

Aplica-se a

CreateNew(String, Int64, MemoryMappedFileAccess)

Origem:
MemoryMappedFile.cs
Origem:
MemoryMappedFile.cs
Origem:
MemoryMappedFile.cs

Cria um arquivo mapeado em memória que tem a capacidade e tipo de acesso especificados na memória do 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);
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

Parâmetros

mapName
String

Um nome a ser atribuído ao arquivo mapeado em memória, ou null para um MemoryMappedFile que você não pretende compartilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a ser alocado para o arquivo mapeado em memória.

access
MemoryMappedFileAccess

Um dos valores de enumeração que especifica o tipo de acesso permitido para o arquivo mapeado na memória. O padrão é ReadWrite.

Retornos

Um arquivo mapeado na memória que tem as características especificadas.

Exceções

mapName é uma cadeia de caracteres vazia.

- ou -

access é definido como somente gravação com o valor de enumeração Write.

capacity é menor que ou igual a zero.

- ou -

access não é um valor de enumeração MemoryMappedFileAccess válido.

Somente .NET Core e .NET 5+: as chamadas para o CreateNew método com um arquivo mapeado de memória nomeada (ou seja, um não nulo mapName) têm suporte apenas em sistemas operacionais Windows.

Comentários

Use esse método para criar um arquivo mapeado na memória que não é persistente (ou seja, não associado a um arquivo em disco), que pode ser usado para compartilhar dados entre processos.

Confira também

Aplica-se a

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

Origem:
MemoryMappedFile.cs
Origem:
MemoryMappedFile.cs
Origem:
MemoryMappedFile.cs

Cria um arquivo mapeado em memória que tem o nome, a capacidade, o tipo de acesso, as opções de alocação de memória e a capacidade de herança especificados.

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

Parâmetros

mapName
String

Um nome a ser atribuído ao arquivo mapeado em memória, ou null para um MemoryMappedFile que você não pretende compartilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a ser alocado para o arquivo mapeado em memória.

access
MemoryMappedFileAccess

Um dos valores de enumeração que especifica o tipo de acesso permitido para o arquivo mapeado na memória. O padrão é ReadWrite.

options
MemoryMappedFileOptions

Uma combinação bit a bit dos valores de enumeração que especifica opções de alocação de memória para o arquivo mapeado na memória.

inheritability
HandleInheritability

Um valor que especifica se um identificador para o arquivo de mapeamento de memória pode ser herdado por um processo filho. O padrão é None.

Retornos

Um arquivo mapeado na memória que tem as características especificadas.

Exceções

mapName é uma cadeia de caracteres vazia.

- ou -

access é definido como somente gravação com o valor de enumeração Write.

capacity é menor que ou igual a zero.

- ou -

access não é um valor de enumeração MemoryMappedFileAccess válido.

- ou -

inheritability não é um valor HandleInheritability válido.

Somente .NET Core e .NET 5+: as chamadas para o CreateNew método com um arquivo mapeado de memória nomeada (ou seja, um não nulo mapName) têm suporte apenas em sistemas operacionais Windows.

Aplica-se a

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

Cria um arquivo mapeado em memória que tem a capacidade, o tipo de acesso, a alocação de memória, as permissões de segurança e a herdabilidade especificadas na memória do 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

Parâmetros

mapName
String

Um nome a ser atribuído ao arquivo mapeado em memória, ou null para um MemoryMappedFile que você não pretende compartilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a ser alocado para o arquivo mapeado em memória.

access
MemoryMappedFileAccess

Um dos valores de enumeração que especifica o tipo de acesso permitido para o arquivo mapeado na memória. O padrão é ReadWrite.

options
MemoryMappedFileOptions

Uma combinação bit a bit dos valores de enumeração que especifica opções de alocação de memória para o arquivo mapeado na memória.

memoryMappedFileSecurity
MemoryMappedFileSecurity

As permissões que podem ser concedidas para acesso a arquivos e operações em arquivos mapeados em memória.

Esse parâmetro pode ser null.

inheritability
HandleInheritability

Um dos valores de enumeração que especifica se um identificador para o arquivo mapeado em memória pode ser herdado por um processo filho. O padrão é None.

Retornos

Um arquivo mapeado na memória que tem as características especificadas.

Atributos

Exceções

mapName é uma cadeia de caracteres vazia.

- ou -

access é definido como somente gravação com o valor de enumeração Write.

capacity é menor que ou igual a zero.

- ou -

access não é um valor de enumeração MemoryMappedFileAccess válido.

- ou -

inheritability não é um valor de enumeração HandleInheritability válido.

Comentários

Use esse método para criar um arquivo mapeado na memória que não é persistente (ou seja, não associado a um arquivo em disco), que pode ser usado para compartilhar dados entre processos.

Confira também

Aplica-se a