MemoryMappedFile.CreateNew 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在系統記憶體中建立記憶體對應檔。
多載
CreateNew(String, Int64) |
建立記憶體對應檔案,此檔案在系統記憶體中具有指定的大小。 |
CreateNew(String, Int64, MemoryMappedFileAccess) |
建立記憶體對應檔案,此檔案在系統記憶體中具有指定的大小和存取類型。 |
CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, HandleInheritability) |
建立記憶體對應檔,這個檔案具有指定的名稱、容量、存取類型、記憶體配置選項和可繼承性。 |
CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, MemoryMappedFileSecurity, HandleInheritability) |
建立記憶體對應檔案,此檔案在系統記憶體中具有指定的大小、存取類型、記憶體配置、安全性權限以及可繼承性。 |
CreateNew(String, Int64)
建立記憶體對應檔案,此檔案在系統記憶體中具有指定的大小。
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
記憶體對應檔案。 發生下列順序的動作:
進程 A 會建立記憶體對應檔案,並將值寫入其中。
進程 B 會開啟記憶體對應檔案,並將值寫入其中。
進程 C 會開啟記憶體對應檔案,並將值寫入其中。
處理 A 讀取並顯示記憶體對應檔案中的值。
進程 A 完成記憶體對應檔案之後,垃圾收集會立即回收該檔案。
若要執行此範例,請執行下列動作:
編譯應用程式並開啟三個命令視窗。
在第一個命令視窗中,執行進程 A。
在第二個命令視窗中,執行進程 B。
返回 [處理 A],然後按 ENTER 鍵。
在第三個 [命令] 視窗中,執行 [進程 C]。
返回 [處理 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)
建立記憶體對應檔案,此檔案在系統記憶體中具有指定的大小和存取類型。
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。
傳回
記憶體對應檔,具有指定的特性。
例外狀況
僅限 .NET Core 和 .NET 5+:只有 Windows 操作系統才支援呼叫 CreateNew
具有具名記憶體對應檔案的方法 (, 非 Null mapName
) 。
備註
使用這個方法可建立記憶體對應檔案,該檔案未保存 (,也就是與磁碟) 上的檔案相關聯,您可以在進程之間共享數據。
另請參閱
適用於
CreateNew(String, Int64, MemoryMappedFileAccess, MemoryMappedFileOptions, 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::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。
傳回
記憶體對應檔,具有指定的特性。
例外狀況
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
列舉值的位元組合,指定記憶體對應檔的記憶體配置選項。
- inheritability
- HandleInheritability
其中一個列舉值,決定記憶體對應檔的控制代碼是否可以由子處理序繼承。 預設為 None。
傳回
記憶體對應檔,具有指定的特性。
- 屬性
例外狀況
capacity
小於或等於零。
-或-
access
不是有效的 MemoryMappedFileAccess 列舉值。
-或-
inheritability
不是有效的 HandleInheritability 列舉值。
備註
使用這個方法可建立記憶體對應檔案,該檔案未保存 (,也就是與磁碟) 上的檔案相關聯,您可以在進程之間共享數據。