在克服了其他一些困难之后,我现在仍然坚持这个(可能是简单的)问题。
我的目标:
问题是,当另一个进程已经完成并且没有处理The file is being used by another process
对象时,我在尝试CreateFromFile()时遇到IOException(MemoryMappedFile
)。理论上,我可以使用互斥锁并使用using
语句不断处理对象,但是将内容转储到磁盘,再次降低执行速度并使目的失效。
我的问题有哪些可行的解决方案?
理论上,我可以将CreateOrOpen()作为非持久文件,然后在需要时将其转储到磁盘,但我相信有更好的方法吗?
编辑:我觉得我没有说清楚。应用程序的所有实例都需要不断处理文件,打开它并在接下来的10,20,60分钟内使用它而不关闭文件。最终所有这些都将被杀死,当操作系统介入时,将地图文件刷新到磁盘。
示例程序:
计划A)
static void Main(string[] args)
{
var mmf = MemoryMappedFile.CreateFromFile(@"C:\Users\admin\Documents\Visual Studio 2010\Projects\serialize\serialize\bin\Debug\File.dat", FileMode.Open, "name");
var accessor = mmf.CreateViewAccessor();
accessor.Write(5, 'd');
Console.Read();
}
计划B)
static void Main(string[] args)
{
var mmf = MemoryMappedFile.CreateFromFile(@"C:\Users\admin\Documents\Visual Studio 2010\Projects\serialize\serialize\bin\Debug\File.dat", FileMode.Open, "name");
var accessor = mmf.CreateViewAccessor();
accessor.Write(2, 'x');
Console.Read();
}
我同时运行两个,让他们等待Console.Read()
。理想情况下,它们应该能够同时访问该文件(即它们都可以在另一个文件之后打开它),但如上所述,我收到了IOException。