读访问后,内存映射文件值设置为零

时间:2017-03-06 10:39:23

标签: c# python ipc shared-memory memory-mapped-files

我想实现Python和C#之间的进程间通信,以便读取我的C#应用​​程序中由Python脚本编写的值。 在C#中,我使用的是MemoryMappedFile类:

publisher

它成功读取值,但之后它将内存映射文件中的值设置为零。因此,如果我再次读取内存映射文件(并且它还没有被Python脚本覆盖),我将只读零。我该如何防止这种情况?

我的python脚本如下所示:

= f.association :publisher

1 个答案:

答案 0 :(得分:1)

由于您使用的是.CreateOrOpen,因此您使用的是非Pesisted MemoryMappedFile(请参阅https://msdn.microsoft.com/en-us/library/dd997372(v=vs.110).aspx,这意味着GC可以免费使用GC

我正在对你的其余代码做一些假设,但它看起来像你CreateOrOpen并在一个方法中读取,因此GC一旦你完成阅读就可以自由处理内容,基本上这是一些记忆你的C#app拥有,它将正常GC。

在A的更广泛的上下文中你需要.CreateOrOpen(即它在应用启动时打开(并保持引用)或在任何适当的“会话”对象中)或移到.CreateFromFile到将其视为持久性的(如果需要/适当的话,可能会在开始时进行一些手动归零)。

TLDR; mmfSimPro应该在app / class级别保存在不在局部变量中的字段中,因此它具有应用程序/类生存期的实时GC句柄,而不仅仅是读取方法的长度。