BinaryFile与MemoryMappedFile之间的区别?

时间:2015-01-23 11:13:39

标签: c# binaryfiles memory-mapped-files

在BinaryFile上使用MemoryMappedFile有什么好处?比较两种方法的阅读时间,所用时间几乎相同?

class Program
{
    public static void WriteToBinaryFile<T>(string filePath, T objectToWrite, bool append = false)
    {
        using (Stream stream = File.Open(filePath, append ? FileMode.Append : FileMode.Create))
        {
            var binaryFormatter = new BinaryFormatter();
            binaryFormatter.Serialize(stream, objectToWrite);
        }
    }

    public static void WriteObjectToMMF(string mmfFile, object objectData)
    {
        // Convert .NET object to byte array
        byte[] buffer = ObjectToByteArray(objectData);

        // Create a new memory mapped file
        using (MemoryMappedFile mmf =
               MemoryMappedFile.CreateFromFile(mmfFile, FileMode.Create, null, buffer.Length))
        {
            // Create a view accessor into the file to accommmodate binary data size
            using (MemoryMappedViewAccessor mmfWriter = mmf.CreateViewAccessor(0, buffer.Length))
            {
                // Write the data
                mmfWriter.WriteArray<byte>(0, buffer, 0, buffer.Length);
            }
        }
    }


}

1 个答案:

答案 0 :(得分:1)

如果顺序写到文件中,则没有太大区别。

如果您使用随机访问进行读取或写入,则会产生巨大差异。

对于内存映射文件,只有(小)数据块实际上是mapped到内存。