问题标签 [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.
windows - 内存映射文件:如何监控内存使用情况
我在一个需要大量内存的 32 位最终用户应用程序上工作。高达数 GB。我最近将我们的内部内存分配策略切换为使用受Raymond Chen 这篇文章启发的无文件的内存映射文件。它工作得很好。
唯一的缺点是:如果我以这种方式分配 1 GB 的内存,它不会显示在性能计数器的任何位置。当然,我确实知道分配了多少,有多少映射到我的地址空间,但我不知道它是如何在物理内存和页面文件上划分的。我想知道,如果不是出于任何其他原因,除了记录它以进行调试。
performance - 内存映射文件在大量顺序读取时更快?为什么?
我使用下面的代码来测量读取内存映射文件的大型顺序读取与仅调用之间的性能差异ReadFile
:
(我只是更改了值TEST_READ_FILE
来更改测试。)
令我惊讶的ReadFile
是,速度慢了约 20%!为什么?
delphi - 文件映射复制更快?
我做了一个应用程序来使用线程和TFileStream的方法复制文件,但是我对速度有点失望,尤其是在复制大文件时。然后我听说了文件映射,这显然可以产生一种更快的复制方法,因为访问文件会更快。
我是初学者,所以我正在尝试,但我还没有设法通过文件映射复制文件。(该文件是创建 test2.iso 但不是做 0ko 3GB ^ ^。)
这是我的代码。
我的问题在哪里?
c++ - 内存映射文件的奇怪行为,一些观察和一些问题
请看下面的这段代码。
我只分配了 32 个字节,但是当我尝试写入超过分配的大小时,我根本没有收到任何错误。这是设计使然还是 Windows 代码中的错误?但是,如果您包含注释部分,则会按预期给出错误。
我问这个是因为我正在考虑利用这个“功能”来发挥我的优势。我可以吗?仅供参考,我有 Win XP ver 2002 SP 3,但我怀疑这在较新的 Windows 中已“修复”,这可能会使我的代码 IDK 失败。任何有用的链接解释这其中的一些内部都会有帮助。
谢谢
linux - 为什么将文件系统类型从 XFS 更改为 JFS 会提高 mmap 文件写入性能?
我一直在玩不同的文件系统,并在使用 mmap 时比较各种文件系统的性能。
令我惊讶的是,更改为 JFS 直接使写入性能翻了一番。我认为已经对页面缓存进行了写入,所以当写入完成后,应用程序会继续快速运行吗?它实际上是linux下的同步操作吗?
读取性能略有提高,但没有那么显着。
c# - 在 Windows 7 中使用 VC++ 和 C# 中的 MemoryMappedFiles 或命名管道进行进程间通信
我正在尝试在 VC++ DLL 和 C# 应用程序之间进行通信。我已经阅读了大量的资源和材料,我尝试使用 MemoryMapped 文件和管道来完成它,但不幸的是我无法开始工作。
以下是我创建用 C# 编写的“接收器”/服务器部分的方法:
这是 VC++ 对应的:
我的问题是,无论我使用哪种方法,打开调用总是返回“找不到文件”错误。在我的 64 位 Windows 7 上,这两个应用程序都在同一个用户帐户下运行。我在这里缺少什么?
filesystems - 虚拟文件系统
大多数游戏都将其资源(模型、纹理等)打包到特殊文件中(例如 Quake 3 中的 .pk3 文件)。显然,这些文件以某种方式被“挂载”并被用作单独的文件系统。
我想知道这是如何实现的。到目前为止,我想出的唯一策略是将偏移大小信息放在文件头中,然后对文件进行内存映射并访问资源,就好像它们是独立的受写保护的内存块一样。
我想知道我的策略是否可行以及是否有更好的选择。
谢谢!
memory - 文件系统 - 内存映射文件
我的操作系统课程的最后一个示例问题:
大多数操作系统都支持“内存映射文件”;这描述了映射到正在运行的进程的地址空间的文件。对文件的读取和写入转换为内存读取和写入。我们可以想象存在两个新的系统调用,map() 和 unmap()。
a) 考虑 map();它接受文件名和虚拟地址,使操作系统将文件映射到从虚拟地址开始的地址空间。描述如何使用虚拟内存系统来支持这个调用。
b) 考虑 unmap();它将文件与虚拟地址空间分离。描述实现此系统调用应采用的统计信息。列出你所有的假设。
c) 在许多 UNIX 系统中,inode 保存在磁盘的开头。另一种设计是在创建文件时分配一个 inode,并将该 inode 放在文件第一个块的开头。讨论这种替代方案的利弊。
d) 如果包含空闲磁盘块信息的位图或空闲列表由于崩溃而完全丢失,会发生什么情况?无论如何要从这场灾难中恢复,还是磁盘不再可用。讨论您对 UNIX 和 FAT 样式的磁盘块分配的答案。
非常感谢有关这些问题的任何讨论信息。
java - Java MemoryMapping 大文件
MappedByteBuffer 对 2GIG 的 Java 限制使其难以用于映射大文件。通常推荐的方法是使用 MappedByteBuffer 数组并通过以下方式对其进行索引:
这可能适用于单个字节,但如果要处理更大的读/写并需要跨越边界(getLong() 或 get(byte[])),则需要重写大量代码。
问题:对于这类场景,您的最佳实践是什么,您是否知道任何可以在不重新发明轮子的情况下重复使用的有效解决方案/代码?
c# - 在 C# .net 4 中读取/写入字节数组
问候溢出者,
我喜欢内存映射文件的灵活性,因为您可以读/写任何值类型。
有没有办法对字节数组做同样的事情而不必将它们复制到例如内存映射缓冲区中?
问候