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

要指派給記憶體對應檔的名稱;針對您不想要跨處理序共用的 MemoryMappedFile,則為 null

capacity
Int64

要配置給記憶體對應檔的大小上限 (以位元組為單位)。

傳回

記憶體對應檔,具有指定的名稱與大小。

例外狀況

mapName 為空字串。

capacity 小於或等於零。

僅限 .NET Core 和 .NET 5+:只有 Windows 操作系統才支援呼叫 CreateNew 具有具名記憶體對應檔案的方法 (, 非 Null mapName) 。

範例

下列範例是由三個不同的進程所組成 (主控台應用程式,) 將值寫入 Boolean 記憶體對應檔案。 發生下列順序的動作:

  1. 進程 A 會建立記憶體對應檔案,並將值寫入其中。

  2. 進程 B 會開啟記憶體對應檔案,並將值寫入其中。

  3. 進程 C 會開啟記憶體對應檔案,並將值寫入其中。

  4. 處理 A 讀取並顯示記憶體對應檔案中的值。

  5. 進程 A 完成記憶體對應檔案之後,垃圾收集會立即回收該檔案。

若要執行此範例,請執行下列動作:

  1. 編譯應用程式並開啟三個命令視窗。

  2. 在第一個命令視窗中,執行進程 A。

  3. 在第二個命令視窗中,執行進程 B。

  4. 返回 [處理 A],然後按 ENTER 鍵。

  5. 在第三個 [命令] 視窗中,執行 [進程 C]。

  6. 返回 [處理 A],然後按 ENTER 鍵。

行程 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

要指派給記憶體對應檔的名稱;針對您不想要跨處理序共用的 MemoryMappedFile,則為 null

capacity
Int64

要配置給記憶體對應檔的大小上限 (以位元組為單位)。

access
MemoryMappedFileAccess

其中一個列舉值,指定記憶體對應檔允許的存取類型。 預設為 ReadWrite

傳回

記憶體對應檔,具有指定的特性。

例外狀況

mapName 為空字串。

-或-

使用 Write 列舉值,將 access 設為唯寫。

capacity 小於或等於零。

-或-

access 不是有效的 MemoryMappedFileAccess 列舉值。

僅限 .NET Core 和 .NET 5+:只有 Windows 操作系統才支援呼叫 CreateNew 具有具名記憶體對應檔案的方法 (, 非 Null mapName) 。

備註

使用這個方法可建立記憶體對應檔案,該檔案未保存 (,也就是與磁碟) 上的檔案相關聯,您可以在進程之間共享數據。

另請參閱

適用於

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

要指派給記憶體對應檔的名稱;針對您不想要跨處理序共用的 MemoryMappedFile,則為 null

capacity
Int64

要配置給記憶體對應檔的大小上限 (以位元組為單位)。

access
MemoryMappedFileAccess

其中一個列舉值,指定記憶體對應檔允許的存取類型。 預設為 ReadWrite

options
MemoryMappedFileOptions

列舉值的位元組合,指定記憶體對應檔的記憶體配置選項。

inheritability
HandleInheritability

決定記憶體對應檔的控制代碼是否可以由子處理序繼承的值。 預設為 None

傳回

記憶體對應檔,具有指定的特性。

例外狀況

mapName 為空字串。

-或-

使用 Write 列舉值,將 access 設為唯寫。

capacity 小於或等於零。

-或-

access 不是有效的 MemoryMappedFileAccess 列舉值。

-或-

inheritability 不是有效的 HandleInheritability 值。

僅限 .NET Core 和 .NET 5+:只有 Windows 操作系統才支援呼叫 CreateNew 具有具名記憶體對應檔案的方法 (, 非 Null mapName) 。

適用於

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

要指派給記憶體對應檔的名稱;針對您不想要跨處理序共用的 MemoryMappedFile,則為 null

capacity
Int64

要配置給記憶體對應檔的大小上限 (以位元組為單位)。

access
MemoryMappedFileAccess

其中一個列舉值,指定記憶體對應檔允許的存取類型。 預設為 ReadWrite

options
MemoryMappedFileOptions

列舉值的位元組合,指定記憶體對應檔的記憶體配置選項。

memoryMappedFileSecurity
MemoryMappedFileSecurity

允許對記憶體對應檔進行檔案存取及作業的可授與權限。

這個參數可以是 null

inheritability
HandleInheritability

其中一個列舉值,決定記憶體對應檔的控制代碼是否可以由子處理序繼承。 預設為 None

傳回

記憶體對應檔,具有指定的特性。

屬性

例外狀況

mapName 為空字串。

-或-

使用 Write 列舉值,將 access 設為唯寫。

capacity 小於或等於零。

-或-

access 不是有效的 MemoryMappedFileAccess 列舉值。

-或-

inheritability 不是有效的 HandleInheritability 列舉值。

備註

使用這個方法可建立記憶體對應檔案,該檔案未保存 (,也就是與磁碟) 上的檔案相關聯,您可以在進程之間共享數據。

另請參閱

適用於