- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要访问共享内存映射文件(由单独的程序创建和拥有);为此,我正在使用
_map = MemoryMappedFile.OpenExisting(
"buffer",
MemoryMappedFileRights.ReadWrite,
HandleInheritability.None);
_mapAccessor = _map.CreateViewAccessor(0, 0, MemoryMappedFileAccess.ReadWrite);
当我关闭应用程序时,我调用了这些:
public void Dispose()
{
if (_mapAccessor != null)
_mapAccessor.Dispose();
if (_map != null)
_map.Dispose();
}
但似乎我在这里做的事情是终止内存映射文件,因为使用它的其他程序开始出现 protected 内存故障。
如果我释放 _map
,它是否真的会破坏内存映射文件,即使它不是继承的所有权?
更新
事实证明,另一个不受我控制的程序在我发出进入空闲模式的信号后(紧接在处理内存映射之前)正在做一些顽皮的事情。
当使用带有“HandleInheritability.None”的“MemoryMappedFile.OpenExisting”时,内存映射文件不会在处理后被销毁。
最佳答案
不,处理通过调用 OpenExisting() 打开的 MemoryMappedFile 不会破坏底层 MMF。
调用 Windows API CreateFileMapping() 的进程控制 MMF 的生命周期,OpenExisting() 改为调用 OpenFileMapping()。
关于c# - Dispose 后保持 MemoryMappedFile 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002528/
在我的 WCF 服务中,我需要提供支持 Range 的文件下载功能用于分 block 下载的 HTTP header 。第一次调用GetFile服务方法创建新的MemoryMappedFile来自磁盘
在 Windows 下,当容量参数(最后一个参数)设置为比基础文件更大的大小时,此 F# 代码会将文件从 12 字节扩展到 655346 字节。这似乎是扩展内存映射文件的最干净的方法。在 mono/l
我有一些方法可以使用 MemoryMappedFiles 来写入/读取数据。如果我使用简单的字符串作为文件名,它们就可以正常工作,例如“file.mmf”。但是,如果我使用完整目录路径,则会抛出上述异
我在执行 MemoryMappedFile 流式传输时遇到了一个小问题。我有 2 个项目,一个用于发送字节,另一个用于读取字节。在这两个进程之间应该有一个 2 秒的 sleep 定时器。 我已经实现了
我在使用 C# 中的 MemoryMappedFiles 时遇到了一些问题。当我只使用 1 个进程时,它们工作得很好,但是当我尝试从不同的进程访问 mmf 文件时,我得到允许这样做的错误。 我有一个数
我正在学习本教程 here 我很难弄清楚如何将字符串“THIS IS A TEST MESSAGE”存储在内存映射文件中,然后将其从另一端拉出。本教程说使用字节数组。请原谅我,我是新手,先自己尝试。
我正在使用 MemoryMappedFile 在两个进程之间交换数据。所以我在两个过程中都创建/打开了这样的文件: MemoryMappedFile m_MemoryMappedFile = Memo
我有两个 .NET 4.0 WinForms 应用程序(主要)从共享的 MemoryMappedFiles 读取地理数据。最终用户可以自由启动其中一个应用程序或另一个应用程序,或同时运行这两个应用程序
如果我在同一个 MemoryMappedFile 中并行读写会发生什么?我是否有必要在阅读之前通过 Mutext 锁定它们,如 MSDN 上的示例所示? Memory-Mapped Files 最佳答
我有一个处理Excel文件(之前上传到服务器)的网络服务,涉及到很多数据库更新,需要相当长的时间。我想提供另一个 web 服务,可以调用它来检查这个过程的进度。它将进程的 ID(可能是 GUID)作为
我需要将应用程序“A”中的变量值共享给同一系统上的不同应用程序。我只需要根据要求使用 MemoryMappedFiles。我创建了另一个简单的应用程序“B”,它从应用程序 A 中读取共享变量的值。但是
我有创建内存映射文件的代码,如下所示: using (Mutex mutex = new Mutex(false, CoordinatorMutexName)) { mutex.WaitOne
我有一组大型对象(超过 20GB),我需要从应用程序快速访问它们。 到目前为止,我已经在应用程序启动时从磁盘读取这些文件到 RAM。这是一项昂贵的任务,因为文件被反序列化为内存中的对象。但是,在加载这
如何使用 MemoryMappedFile 读取文件字节并将其放入 byte[] 数组? 最佳答案 假设您只想读取文件的一部分,这样的事情应该可行: long offset = 0x10000000;
是否可以结合使用 MemoryMappedFile 和 FileSystemWatcher?换句话说,如何为 FileSystemWatcher 的构造函数获取内存映射文件的路径: new FileS
我的任务是实现一个搜索功能,该功能将搜索几个大型(几 MB)日志文件并返回包含关键字的行。日志文件不断被添加到池中,因此每次搜索都必须是动态的。 创建 MemoryMappedFile 是否有意义?对
在 C# 4.0 中,MemoryMappedFile 有几个工厂方法:CreateFromFile、CreateNew、CreateOrOpen 或 打开现有。如果 MemoryMappedFile
正如标题所说;我可以依赖 MemoryMappedFile 来创建一个全为零的文件吗?我已经通过读取一些新创建的文件进行了测试,但这种“测试”似乎是徒劳的,尽管我还没有看到非零字节。 是否有任何我遗漏
下面的代码抛出这个异常: “该进程无法访问文件 '\filename',因为它正被另一个进程使用。” 很公平,但是关闭阅读器和/或 mmf 以便删除文件的正确方法是什么?我认为 MemoryMappe
我用 MemoryMappedFile 做了一个简单的测试 msdn说: 2 个进程,1 个内存映射文件: 第一个进程添加字符串“1” 第一个进程等待 第二个进程添加字符串“2”并终止 第一个进程现在
我是一名优秀的程序员,十分优秀!