C# 在进程之间共享来自磁盘的内存映射文件

C# 在进程之间共享来自磁盘的内存映射文件,c#,ipc,memory-mapped-files,C#,Ipc,Memory Mapped Files,当使用.NET中提供的内存映射功能在进程执行期间在磁盘上共享物理文件时,我面临的问题似乎微不足道 我的目标是: 我在磁盘上有一个文件,比如file.dat 我有两个独立的进程,它们可能同时产生,但不一定 无论谁先启动,都应该将文件加载到内存中,然后使用它 用于操作。另一个进程检查文件是否已加载 在启动时,它会看到它确实是这样,所以它只是继续它的工作 任务 目前,我正在使用MemoryMappedFile.CreateFromFile函数。但是,我注意到,有一种方法可以检查其他进程是否已将文件加载

当使用.NET中提供的内存映射功能在进程执行期间在磁盘上共享物理文件时,我面临的问题似乎微不足道

我的目标是:

我在磁盘上有一个文件,比如file.dat 我有两个独立的进程,它们可能同时产生,但不一定 无论谁先启动,都应该将文件加载到内存中,然后使用它 用于操作。另一个进程检查文件是否已加载 在启动时,它会看到它确实是这样,所以它只是继续它的工作 任务 目前,我正在使用MemoryMappedFile.CreateFromFile函数。但是,我注意到,有一种方法可以检查其他进程是否已将文件加载到内存中。试图同时从两个进程加载此文件会导致共享访问冲突


有CreateOrOpen函数,但它只适用于非持久性数据,这不是我的情况。我曾设想过一个类似互斥体的API,函数在尝试创建多个同名文件或执行类似操作时会抛出异常。显然,在这种情况下没有采用这种方法,那么我还可以使用什么来实现我的目标?

其他可能已打开文件的过程不属于您?对吗?我认为这就是为什么你不能要求应用程序以读共享方式打开它?除了共享问题之外,你需要使用超负荷的Create。。。这支持共享,我不明白为什么应用程序的实例需要知道它是否是第一个。难道它不能打开内存映射并继续吗?-不管怎么说,这不像是在进程之间共享实际的内存映射对象,只是文件的视图。我想我现在明白了-CreateFromFile函数中传递的name属性告诉系统我想使用这个和这个内存文件。如果它已经存在,我只需要给它一个句柄,并可以享受数据。对吗?应该对,对。