内存映射文件是 C# 中的一项强大功能,可用于高效读取和写入大型文件,尤其是在处理不完全适合内存的文件时。它们允许您将文件的一部分直接映射到内存中,从而显着提高性能。
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Text;
class Program
{
static void Main()
{
// Define the file path and size
string filePath = "largefile.txt";
long fileSize = 1024 * 1024 * 100; // 100 MB
// Create or open the memory-mapped file
using (var mmf = MemoryMappedFile.CreateFromFile(filePath, FileMode.OpenOrCreate, null, fileSize))
{
// Create a memory-mapped view accessor to read and write data
using (var accessor = mmf.CreateViewAccessor())
{
// Write data to the memory-mapped file
string dataToWrite = "Hello, Memory-Mapped Files!";
byte[] dataBytes = Encoding.UTF8.GetBytes(dataToWrite);
accessor.WriteArray(0, dataBytes, 0, dataBytes.Length);
// Read data from the memory-mapped file
byte[] readData = new byte[dataBytes.Length];
accessor.ReadArray(0, readData, 0, readData.Length);
string readDataString = Encoding.UTF8.GetString(readData);
Console.WriteLine("Data read from memory-mapped file: " + readDataString);
}
}
}
}
在这个例子中:
我们为内存映射文件定义文件路径 ( filePath) 和大小 ( )。fileSize在本例中,我们正在处理一个 100 MB 的文件。
我们使用创建或打开内存映射文件MemoryMappedFile.CreateFromFile。如果该文件不存在,则会创建该文件。
我们使用创建内存映射视图访问器mmf.CreateViewAccessor()。该访问器允许我们有效地读取数据并将其写入内存映射文件。
我们使用将数据写入内存映射文件accessor.WriteArray。在此示例中,我们将字符串转换为字节后写入文件。
我们使用从内存映射文件读取数据accessor.ReadArray。我们将数据读回字节数组,然后将其转换为字符串。
内存映射文件是大型文件的绝佳选择,因为它们提供了对数据的高效随机访问,减少了 I/O 开销,并显着提高了读写性能。它们对于日志文件处理或处理不完全适合内存的大型数据集等场景特别有用。