Поделиться через


MemoryMappedFile.CreateNew Метод

Определение

Создает размещенный в памяти файл в системной памяти.

Перегрузки

CreateNew(String, Int64)

Создает размещенный в памяти файл с заданной емкостью в системной памяти.

CreateNew(String, Int64, MemoryMappedFileAccess)

Создает размещенный в памяти файл с заданной емкостью и типом доступа в системной памяти.

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

Создает отображенный в память файл с заданными именем, емкостью, типом доступа, параметрами выделения памяти и режимом наследования.

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

Создает размещенный в памяти файл с заданной емкостью, типом доступа, выделением памяти, настройками безопасности и режимом наследования в системной памяти.

CreateNew(String, Int64)

Исходный код:
MemoryMappedFile.cs
Исходный код:
MemoryMappedFile.cs
Исходный код:
MemoryMappedFile.cs

Создает размещенный в памяти файл с заданной емкостью в системной памяти.

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

Параметры

mapName
String

Имя, присваиваемое отображенному в память файлу, или null для MemoryMappedFile, которое не будет использоваться совместно с другими процессами.

capacity
Int64

Максимальный размер, выделяемый размещенному в памяти файлу, в байтах.

Возвращаемое значение

Размещенный в памяти файл с заданными именем и емкостью.

Исключения

Параметр mapName равен пустой строке.

capacity меньше или равно нулю.

Только .NET Core и .NET 5+. Вызовы CreateNew метода с именованным сопоставленным файлом памяти (т. е. не null mapName) поддерживаются только в операционных системах Windows.

Примеры

Следующий пример состоит из трех отдельных процессов (консольных приложений), которые записывают Boolean значения в файл, сопоставленный в памяти. Последовательность действий следующая:

  1. Процесс A создает сопоставленный в памяти файл и записывает в него значение.

  2. Процесс Б открывает сопоставленный в памяти файл и записывает в него значение.

  3. Процесс C открывает сопоставленный в памяти файл и записывает в него значение.

  4. Процесс A считывает и отображает значения из сопоставленного в памяти файла.

  5. После завершения процесса A с сопоставленным в памяти файлом он немедленно освобождается путем сборки мусора.

Чтобы выполнить этот пример, сделайте следующее:

  1. Скомпилируйте приложения и откройте три окна команд.

  2. В первом командном окне выполните команду Process A.

  3. Во втором окне команды запустите процесс B.

  4. Вернитесь к процессу A и нажмите клавишу ВВОД.

  5. В третьем командном окне выполните команду Process C.

  6. Вернитесь к процессу A и нажмите клавишу ВВОД.

Выходные данные процесса A выводятся следующим образом:

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

Process 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

Process 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

Process 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

Комментарии

Используйте этот метод для создания сопоставленного в памяти файла, который не сохраняется (то есть не связан с файлом на диске), который можно использовать для совместного использования данных между процессами.

См. также раздел

Применяется к

CreateNew(String, Int64, MemoryMappedFileAccess)

Исходный код:
MemoryMappedFile.cs
Исходный код:
MemoryMappedFile.cs
Исходный код:
MemoryMappedFile.cs

Создает размещенный в памяти файл с заданной емкостью и типом доступа в системной памяти.

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

Параметры

mapName
String

Имя, присваиваемое отображенному в память файлу, или null для MemoryMappedFile, которое не будет использоваться совместно с другими процессами.

capacity
Int64

Максимальный размер, выделяемый размещенному в памяти файлу, в байтах.

access
MemoryMappedFileAccess

Одно из значений перечисления, определяющее разрешенный тип доступа к размещенному в памяти файлу. Значение по умолчанию — ReadWrite.

Возвращаемое значение

Размещенный в памяти файл с заданными характеристиками.

Исключения

Параметр mapName равен пустой строке.

-или-

Параметр access задан как доступный только для записи с помощью значения перечисления Write.

capacity меньше или равно нулю.

-или-

access не является допустимым значением перечисления MemoryMappedFileAccess.

Только .NET Core и .NET 5+. Вызовы CreateNew метода с именованным сопоставленным файлом памяти (т. е. не null mapName) поддерживаются только в операционных системах Windows.

Комментарии

Используйте этот метод для создания сопоставленного в памяти файла, который не сохраняется (то есть не связан с файлом на диске), который можно использовать для совместного использования данных между процессами.

См. также раздел

Применяется к

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

Исходный код:
MemoryMappedFile.cs
Исходный код:
MemoryMappedFile.cs
Исходный код:
MemoryMappedFile.cs

Создает отображенный в память файл с заданными именем, емкостью, типом доступа, параметрами выделения памяти и режимом наследования.

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

Параметры

mapName
String

Имя, присваиваемое отображенному в память файлу, или null для MemoryMappedFile, которое не будет использоваться совместно с другими процессами.

capacity
Int64

Максимальный размер, выделяемый размещенному в памяти файлу, в байтах.

access
MemoryMappedFileAccess

Одно из значений перечисления, определяющее разрешенный тип доступа к размещенному в памяти файлу. Значение по умолчанию — ReadWrite.

options
MemoryMappedFileOptions

Побитовое сочетание значений перечисления, которое задает параметры выделения памяти для размещенного в памяти файла.

inheritability
HandleInheritability

Значение, которое указывает, может ли дескриптор отображенного в память файла наследоваться дочерним процессом. Значение по умолчанию — None.

Возвращаемое значение

Размещенный в памяти файл с заданными характеристиками.

Исключения

Параметр mapName равен пустой строке.

-или-

Параметр access задан как доступный только для записи с помощью значения перечисления Write.

capacity меньше или равно нулю.

-или-

access не является допустимым значением перечисления MemoryMappedFileAccess.

-или-

inheritability не является допустимым значением HandleInheritability.

Только .NET Core и .NET 5+. Вызовы CreateNew метода с именованным сопоставленным файлом памяти (т. е. не null mapName) поддерживаются только в операционных системах Windows.

Применяется к

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

Создает размещенный в памяти файл с заданной емкостью, типом доступа, выделением памяти, настройками безопасности и режимом наследования в системной памяти.

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

Параметры

mapName
String

Имя, присваиваемое отображенному в память файлу, или null для MemoryMappedFile, которое не будет использоваться совместно с другими процессами.

capacity
Int64

Максимальный размер, выделяемый размещенному в памяти файлу, в байтах.

access
MemoryMappedFileAccess

Одно из значений перечисления, определяющее разрешенный тип доступа к размещенному в памяти файлу. Значение по умолчанию — ReadWrite.

options
MemoryMappedFileOptions

Побитовое сочетание значений перечисления, которое задает параметры выделения памяти для размещенного в памяти файла.

memoryMappedFileSecurity
MemoryMappedFileSecurity

Разрешения, которые могут быть предоставлены для доступа к файлам и операций с размещенными в памяти файлами.

Этот параметр может иметь значение null.

inheritability
HandleInheritability

Одно из значений перечисления, определяющее, может ли дескриптор размещенного в памяти файла наследоваться дочерним процессом. Значение по умолчанию — None.

Возвращаемое значение

Размещенный в памяти файл с заданными характеристиками.

Атрибуты

Исключения

Параметр mapName равен пустой строке.

-или-

Параметр access задан как доступный только для записи с помощью значения перечисления Write.

capacity меньше или равно нулю.

-или-

access не является допустимым значением перечисления MemoryMappedFileAccess.

-или-

inheritability не является допустимым значением перечисления HandleInheritability.

Комментарии

Используйте этот метод для создания сопоставленного в памяти файла, который не сохраняется (то есть не связан с файлом на диске), который можно использовать для совместного использования данных между процессами.

См. также раздел

Применяется к