2013-06-20 149 views
1

我正在训练基于单个数据库的多个网络。boost shared_memory_object存储磁盘中的内容?

所以为了加快速度并减少磁盘读数,我使用了由boost提供的shared_memory_object类。由于实验室工作站目前无法使用,因此我将代码迁移到个人电脑。

在实验室工作站上,主机程序成功将所有数据读取到内存中。但在我的电脑上,奇怪的是它会在系统驱动器上创建一个文件,而不是将数据存储在内存中。整个数据库大约3.7 GB;该实验室工作站具有32 GB内存并运行Windows Server 2008 R2;我的电脑有8 GB内存并运行Windows 7.

应该有足够的内存来存储数据。所以为什么?是否有某些方法可以强制程序将所有数据保存在内存中?

+0

还没有回复? –

回答

0

这是使用内存映射文件作为共享内存的后盾,因此任何一台计算机上的磁盘上都需要物理文件。操作系统仍然对该文件的内容进行广泛的缓存,所以如果空间可用的话,它仍然可以实际上将其缓存在RAM中。

如果您不喜欢查看磁盘上物理上存在的文件名,那么您可以尝试使用 windows_shared_memory。它将使用从系统交换文件获取的空间作为共享内存的后盾。

+0

但为什么它在Win 7和Server 08之间表现不同?在服务器08上,没有这样的物理文件。 –

+0

我没有在Win32上实际使用'shared_memory_object',所以我无法确认行为上的差异。但是,如果您没有在提供给shared_memory_object的文件名中指定绝对路径,则有可能在Server 08上创建了一个文件,但它只位于意外的目录中。你也可以使用SysInternals的Process Explorer来查看它是否可能在某个地方出现意外的打开文件句柄。 – bovine