问题标签 [memory-mapped-files]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
18030 浏览

c++ - 系统错误 0x5:CreateFileMapping()

我希望使用命名共享内存来实现 IPC。

为此,其中一个步骤是使用CreateFileMapping()获取映射内存对象的句柄。

我完全按照 MSDN 网站的建议: http: //msdn.microsoft.com/en-us/library/aa366551 (v=VS.85).aspx :

但是,返回的句柄始终为0x0,返回的系统错误代码为:0x5(拒绝访问。)

  • 仅需要命名内存共享(不是文件共享)。
  • Windows 7 x64位操作系统
  • 管理员的用户权限可用
  • 开发的应用程序:64位插件应用程序(.dll)

有没有人有同样的经历,求解决方法?我使用 MSDN 站点作为参考,所以我不认为代码中存在问题。

0 投票
2 回答
582 浏览

.net - 从巨大的二进制文件中反序列化对象的最快方法

所以场景如下:我有一个 2-3 GB 的二进制序列化对象的大文件,我还有一个索引文件,其中包含每个对象的 id 及其在文件中的偏移量。

我需要编写一个给定一组 id 的方法,将它们反序列化到内存中。性能是最重要的基准,保持合理的内存要求是第二个。

使用 MemoryMappedFile 似乎是要走的路,但是我有点不确定如何处理大文件。我无法为整个文件创建 MemoryMappedViewAccessor,因为它太大了。我可以同时打开几个不同段的 MemoryMappedViewAccessor,而不会对内存造成太大影响,在这种情况下,这些段应该有多大?

如果数据被大量访问然后处理掉,视图可能会在内存中保留一段时间

一种可能很幼稚的方法是按偏移量对要获取的对象进行排序,然后简单地为每个带有小缓冲区的偏移量调用 CreateViewAccessor。另一种方法是尝试找出所需的不同 MemoryMappedViewAccessor 的最少数量及其大小。但我不确定创建 CreateViewAccessor 的开销以及一次可以安全访问多少空间。我可以做一些测试,但如果有人有更好的主意...... :)

我想另一种方法是将大数据文件分成几个,但我不确定在这种情况下会有什么好处......

0 投票
5 回答
6174 浏览

c# - c# 内存映射文件读取

我正在尝试阅读一些文本文件(每个大约 300 kb)。到目前为止,我一直在使用 Filestream 打开文件并阅读它。(制表符分隔)。但是,我听说过 .net 4.0 中的内存映射文件。它会让我的阅读速度更快吗?

是否有任何示例代码可以读取简单文件并比较性能?

0 投票
1 回答
281 浏览

iphone - 如何在 [NSData dataWithContentsOfMappedFile:] 之后检查错误?

我的项目中有这段代码:

显然,如果mappedData是 nil 它没有成功。但是我怎样才能得到关于它为什么没有成功的细节呢?没有dataWithContentsOfMappedFile:withError:

0 投票
3 回答
2269 浏览

java - 如何在java中访问c ++内存映射文件

我有一个 Windows C++ 应用程序,它为经常更新的位图创建一个内存映射文件。我想访问此内存映射文件以在 java 应用程序中显示实时图像。我怎样才能做到这一点?

我知道 FileChannel 可以映射到内存,但我看不到如何访问由另一个进程创建的内存映射文件。

我已经在我的 java 应用程序中使用了 JNA,我应该使用它来访问标准的 Windows 内存映射文件功能吗?

或者除了内存映射文件之外,您还有其他解决方案可以从单独的程序创建的图像中显示 Java 中的实时图像流吗?

0 投票
1 回答
3197 浏览

64-bit - 在 32 位和 64 位进程之间共享内存映射文件

我的要求是在 32 位和 64 位进程之间提供一个共享内存文件。这个文件可以由任何进程创建,这取决于谁先来。- 我仍然不确定这是否可行,如果可以,以后有什么陷阱吗?- 从 google 获得的一些信息:内存映射文件 32 位应用程序只能共享映射到 32 位虚拟地址空间的内存映射文件。64 位应用程序可以在 32 位或 64 位虚拟地址空间中共享内存映射文件。要将文件映射到可在 64 位和 32 位应用程序之间共享的内存中,您的 64 位应用程序必须在调用 mmap(2) 时使用 MAP_SHARED 标志指定 MAP_ADDR32 标志。网址:http: //docs.hp.com/en/5966-9844/ch02s08.html#d0e3037

这是否意味着对于这种共享,内存映射文件应该由 64 位进程使用给定标志创建?

谢谢

0 投票
2 回答
669 浏览

windows - 带部分对象(CreateFileMapping)的 I/O 是否比基本 api(Read/WriteFile)快?

  1. CreateFileMapping 和 MapViewOfFile,然后我们使用 memcpy 之类的函数进行 I/O。
  2. 只需使用读/写文件。

第一个比第二个快吗?我不明白。

为什么更快?
如果我们使用一个section对象,那么我们可以从VMM或Cache Manager中获得更多的缓存好处吗?

0 投票
6 回答
5954 浏览

c# - 使用 MemoryMappedFile 和 FileSystemWatcher 检测日志文件的新条目

我有一个由 3rd 方应用程序编写的日志文件,我希望我的应用程序实时/近乎“读取”该日志文件,解析新的日志条目并对某些事件采取行动。

我的想法是,我可以通过结合使用 FileSystemWatcher(发出文件更改信号)和 MemoryMappedFile(从某个偏移量继续读取)来实现这一点。

但是,由于这是我第一次使用 MemoryMappedFiles,我确实遇到了一些问题,这些问题可能是由于没有正确理解这个概念而引起的(例如,我无法打开现有文件,因为它正在被其他进程使用)。

我想知道是否有人有一个如何使用 MemoryMappedFiles 读取被另一个进程锁定的文件的示例?

谢谢,

汤姆

编辑:

从评论来看,内存映射文件似乎无法帮助我访问具有独占锁的文件。然而,像 Baretail (http://www.baremetalsoft.com/baretail/index.php) 这样的“tail”工具能够做到这一点。以 1s 的间隔从另一个应用程序读取具有排他锁的文件没有问题)。那么,必须有某种方法来做到这一点?

编辑编辑

要回答我自己的问题,打开锁定文件的技巧是,使用以下访问标志创建 FileStream:

0 投票
1 回答
521 浏览

.net - 附加到 MemoryMappedFile?

也许我从根本上误解了内存映射文件的工作原理,但是,当我使用 MemoryMappedFile 时,如何附加到文件的末尾?CreateViewAccessor 只允许我创建文件当前容量的视图

我可以改用底层的 FileStream 写到最后,但这不会破坏使用 MemoryMapping 的目的吗?(我认为它也会缓存并将附加内容写入磁盘)。另一种选择是缓存写入和从缓存中读取,而不是附加数据的内存流。

只是想知道使用不断增长的内存映射文件的常见做法是什么,所以我不再重新发明轮子

0 投票
2 回答
1278 浏览

java - Java 内存映射文件?

Java 中的内存映射文件是否像 Windows 中的内存映射文件?还是仅仅基于Java中的内存和文件通用操作进行仿真?