gpt4 book ai didi

c# - C# MemoryMappedFile 会扩展吗?

转载 作者:行者123 更新时间:2023-12-05 04:16:16 28 4
gpt4 key购买 nike

我正在使用 MemoryMappedFile 在两个进程之间交换数据。所以我在两个过程中都创建/打开了这样的文件:

MemoryMappedFile m_MemoryMappedFile = MemoryMappedFile.CreateOrOpen("Demo", 8);

文件访问本身在两个进程中都受到全局互斥锁的保护。现在,当我将数据写入大于定义的 8 字节长度的文件时,我不会得到异常。

var random = new Random();
var testData = new byte[55];
random.NextBytes(testData);
using (var contentAccessor = m_MemoryMappedFile.CreateViewStream())
{
contentAccessor.Write(testData, 0, testData.Length);
}

所以也许我在这里弄错了,但我想如果我创建一个具有指定容量(在我的例子中为 8 字节)的非持久内存映射文件,则不允许写入超过 8 字节的数据?或者我是否通过上面的调用破坏了内存?任何解释都很好?

最佳答案

这在the documentation for CreateViewStream()中特别提到:

To create a complete view of the memory-mapped file, specify 0 (zero) for the size parameter. If you do this, the size of the view might be larger than the size of the source file on disk. This is because views are provided in units of system pages, and the size of the view is rounded up to the next system page size.

它确实四舍五入到页面大小。最好的办法是使用允许您设置 View 大小的方法重载:

using (var contentAccessor = m_MemoryMappedFile.CreateViewStream(0, 8))
{
contentAccessor.Write(testData, 0, testData.Length);
}

关于c# - C# MemoryMappedFile 会扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28392130/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com