MemoryMappedFile.CreateNew Método

Definição

Cria um ficheiro mapeado de memória na memória do sistema.

Sobrecargas

Name Description
CreateNew(String, Int64)

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

CreateNew(String, Int64, MemoryMappedFileAccess)

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

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

Cria um ficheiro mapeado de memória que tem o nome especificado, capacidade, tipo de acesso, opções de alocação de memória e herdabilidade.

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

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

CreateNew(String, Int64)

Cria um ficheiro 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);
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 para atribuir ao ficheiro mapeado em memória, ou null para um MemoryMappedFile que não pretende partilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a alocar ao ficheiro mapeado em memória.

Devoluções

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

Exceções

mapName é uma corda vazia.

capacity é menor ou igual a zero.

.NET Core e .NET 5+ apenas: Chamadas ao método CreateNew com um ficheiro mapeado de memória nomeado (ou seja, um mapName não-nulo) são suportadas apenas em sistemas operativos Windows.

Exemplos

O exemplo seguinte é composto por três processos separados (aplicações de consola) que escrevem Boolean valores num ficheiro mapeado em memória. A seguinte sequência de ações ocorre:

  1. O Processo A cria o ficheiro mapeado em memória e escreve um valor nele.
  2. O Processo B abre o ficheiro mapeado em memória e escreve um valor nele.
  3. O processo C abre o ficheiro mapeado em memória e escreve um valor nele.
  4. O Processo A lê e apresenta os valores do ficheiro mapeado em memória.
  5. Depois de o Processo A terminar com o ficheiro mapeado em memória, o ficheiro é imediatamente recuperado pela recolha de lixo.

Para executar este exemplo, faça o seguinte:

  1. Compila as aplicações e abre três janelas de comando.
  2. Na primeira janela de Comandos, execute o Processo A.
  3. Na segunda janela de Comandos, execute o Processo B.
  4. Volte ao Processo A e pressione ENTER.
  5. Na terceira janela de Comandos, execute o Processo C.
  6. Volte 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

Observações

Use este método para criar um ficheiro mapeado em memória que não seja persistido (ou seja, não esteja associado a um ficheiro no disco), que pode usar para partilhar dados entre processos.

Ver também

Aplica-se a

CreateNew(String, Int64, MemoryMappedFileAccess)

Cria um ficheiro mapeado em memória que tem a capacidade e o 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);
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 para atribuir ao ficheiro mapeado em memória, ou null para um MemoryMappedFile que não pretende partilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a alocar ao ficheiro mapeado em memória.

access
MemoryMappedFileAccess

Um dos valores de enumeração que especifica o tipo de acesso permitido ao ficheiro mapeado em memória. A predefinição é ReadWrite.

Devoluções

Um ficheiro mapeado em memória que tem as características especificadas.

Exceções

mapName é uma corda vazia.

-ou-

access está definido para apenas escrita com o Write valor de enumeração.

capacity é menor ou igual a zero.

-ou-

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

.NET Core e .NET 5+ apenas: Chamadas ao método CreateNew com um ficheiro mapeado de memória nomeado (ou seja, um mapName não-nulo) são suportadas apenas em sistemas operativos Windows.

Observações

Use este método para criar um ficheiro mapeado em memória que não seja persistido (ou seja, não esteja associado a um ficheiro no disco), que pode usar para partilhar dados entre processos.

Ver também

Aplica-se a

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

Cria um ficheiro mapeado de memória que tem o nome especificado, capacidade, tipo de acesso, opções de alocação de memória e herdabilidade.

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

Parâmetros

mapName
String

Um nome para atribuir ao ficheiro mapeado em memória, ou null para um MemoryMappedFile que não pretende partilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a alocar ao ficheiro mapeado em memória.

access
MemoryMappedFileAccess

Um dos valores de enumeração que especifica o tipo de acesso permitido ao ficheiro mapeado em memória. A predefinição é ReadWrite.

options
MemoryMappedFileOptions

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

inheritability
HandleInheritability

Um valor que especifica se um handle do ficheiro mapeado em memória pode ser herdado por um processo filho. A predefinição é None.

Devoluções

Um ficheiro mapeado em memória que tem as características especificadas.

Exceções

mapName é uma corda vazia.

-ou-

access está definido para apenas escrita com o Write valor de enumeração.

capacity é menor ou igual a zero.

-ou-

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

-ou-

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

.NET Core e .NET 5+ apenas: Chamadas ao método CreateNew com um ficheiro mapeado de memória nomeado (ou seja, um mapName não-nulo) são suportadas apenas em sistemas operativos Windows.

Aplica-se a

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

Cria um ficheiro mapeado em memória que tem a capacidade especificada, tipo de acesso, alocação de memória, permissões de segurança e herdabilidade 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 para atribuir ao ficheiro mapeado em memória, ou null para um MemoryMappedFile que não pretende partilhar entre processos.

capacity
Int64

O tamanho máximo, em bytes, a alocar ao ficheiro mapeado em memória.

access
MemoryMappedFileAccess

Um dos valores de enumeração que especifica o tipo de acesso permitido ao ficheiro mapeado em memória. A predefinição é ReadWrite.

options
MemoryMappedFileOptions

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

memoryMappedFileSecurity
MemoryMappedFileSecurity

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

Este parâmetro pode ser null.

inheritability
HandleInheritability

Um dos valores de enumeração que especifica se um handle do ficheiro mapeado em memória pode ser herdado por um processo filho. A predefinição é None.

Devoluções

Um ficheiro mapeado em memória que tem as características especificadas.

Atributos

Exceções

mapName é uma corda vazia.

-ou-

access está definido para apenas escrita com o Write valor de enumeração.

capacity é menor ou igual a zero.

-ou-

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

-ou-

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

Observações

Use este método para criar um ficheiro mapeado em memória que não seja persistido (ou seja, não esteja associado a um ficheiro no disco), que pode usar para partilhar dados entre processos.

Ver também

Aplica-se a