c ++重数据处理和分页

时间:2010-11-10 09:26:40

标签: c++ windows paging virtual-method

我正在编写一个应该尽可能实时处理大量数据(1-10 GB之间)的应用程序。

数据存在于硬盘上的多个二进制数据文件中,每个文件在几kb到128MB之间。当进程开始时,首先确定实际需要哪些数据。然后通过用户界面获取一些用户设置,然后通过块处理数据块,其中总是将文件加载到存储器中,处理,然后从存储器中清除。此处理应该很快,因为用户可以更改某些设置,然后重新处理相同的数据,并且此用户交互应尽可能流畅。

现在从磁盘加载是一个相当大的瓶颈,我想在已确定将使用哪些文件的阶段预先加载数据。但是 - 如果我预加载太多数据,操作系统将使用虚拟内存,我将有大量的页面故障,使处理速度更慢。

如何确定预加载多少数据以保持页面故障低?我可以以某种方式影响我想要保留在内存中的数据吗?

谢谢!

//编辑:我目前正在Windows 7 64上运行(但该应用程序是32位)并且该应用程序不需要在任何计算机上运行 - 仅在特定计算机上运行,​​因为这是一个研究项目。

3 个答案:

答案 0 :(得分:3)

对于大型二进制文件的随机访问的一般情况,我会考虑使用本机OS文件内存映射API。从性能的角度来看,这很可能是最有效的解决方案,大多数操作系统中都有一个系统API可以将页面锁定在内存中,但我不会使用它。在做更具体的事情时,在大多数情况下,可以使用智能索引来准确了解其中的内容并解决大多数性能瓶颈。

是的,没有任何魔力,如果你需要RAM中的所有10G,因为它们经常被访问,你的盒子上可以获得16GB的RAM。

答案 1 :(得分:2)

对于Windows平台,我建议您查看:

答案 2 :(得分:1)

boost::interprocess

中有文件映射支持