【问题标题】:Load stream into memory outside the program scoop将流加载到程序勺外的内存中
【发布时间】:2018-07-02 17:10:15
【问题描述】:

我正在调试一个依赖于 ~1GB 大文件的程序。我目前被困在没有 SSD 的低性能 PC 中。每次我在一些编辑后运行程序。这 1GB 已加载到内存中,这需要一些时间。

考虑到我从一开始就需要这个 1GB 的文件,并且无法从中加载我需要的内容。

是否有可能以某种方式(不必是标准的和可移植的)在内存中的某个位置仅加载一次,退出程序后不会被破坏,然后每次从内存中的同一位置使用它(一种指向操作系统级别的内存块的指针)?

我正在使用 MSVC 2017 和 Windows 10。

【问题讨论】:

  • 从来没有做过这样的事情,但我想你可以有一个虚拟进程来保持文件处于活动状态,然后在构建后与你的程序共享它。似乎 boost 有一个可以用于此的库,请参阅here
  • 当您在 Windows 上时,如果您不介意使用不可移植的代码,Memory Mapped Files 非常适合这种用例。

标签: c++ windows memory


【解决方案1】:

是的,尝试设置 RAMDisk 并将此文件存储在 RAMDisk 中。它会一直存在,直到您关闭计算机或将其删除。

这将有效地允许您的系统读取/写入这个 1GB 文件,就好像它存储在 RAM 上一样 - 这正是您想要的。但它只需要一次加载和一次卸载。

普通的 7200RPM 硬盘驱动器 - 您可能通过从 HDD 加载看到的内容 -> 每次执行时的 RAM

一个非常普通的 SSD。如您所见,在此基准测试中速度提高了大约四倍。

使用 RAMDisk,在这种情况下使用 AMD Radeon RAMDisk 软件进行设置

换句话说,这并不是一个真正的编程解决方案 - 它只是您的机器没有 SSD 来存储这个大文件以供读/写目的的一种解决方法。您的代码可能保持不变,它只会从您必须设置的 RAMDISK 中读取文件。

希望这会有所帮助!

【讨论】:

  • 这适得其反。如果您有足够的内存,文件缓存也可以正常工作。如果您没有有足够的内存来保存整个文件,文件缓存可以保存文件的一部分。 RAMdisk 不能。
猜你喜欢
  • 1970-01-01
  • 2011-04-12
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多