【问题标题】:MMF (Exclusive /non shared memory mapped file)MMF(独占/非共享内存映射文件)
【发布时间】:2012-05-29 22:35:26
【问题描述】:
我们的应用程序在 WinCE5.0 上运行(用 .net cf 编写)
由于某些原因,我们必须创建 MMF 文件以供我们的应用程序使用(MMF 文件应该仅供我们的应用程序使用)。
现在我们注意到,在随机时间(我们无法准确找到何时以及在何种情况下)MMF 文件被其他进程使用,该进程将数据写入其上。这会使我们的 MMF 文件损坏。
请告诉我们如何避免这种情况。
换句话说,我们希望 MMF 专供我们的应用程序使用,而不是在其他应用程序之间共享。
谢谢。
【问题讨论】:
标签:
windows-ce
win32-process
.net-cf-3.5
windows-nt
【解决方案1】:
Windows CE 上的内存映射文件总是映射在虚拟地址空间的共享文件映射区域中。所有进程都可以对该区域进行读写访问。您无法保护该区域不被其他进程覆盖。
.NET Compact Framework 本身使用内存映射来映射该区域中已加载的程序集,以避免将它们加载到进程槽中。我希望您会遇到其他问题,例如当 .NETCF 尝试从已损坏的程序集中 JIT 代码时得到 TypeLoadException、MissingMethodException 或 ExecutionEngineException。
您确定您没有关闭文件映射句柄或底层文件句柄吗?这可能会导致 Windows 认为内存是空闲的,并将其重用于其他目的。