Mat*_*Mat 6 c++ windows paging virtual-functions
我正在编写一个应该尽可能实时处理大量数据(1-10 GB之间)的应用程序.
数据存在于硬盘上的多个二进制数据文件中,每个文件在几kb到128MB之间.当进程开始时,首先确定实际需要哪些数据.然后通过用户界面获取一些用户设置,然后通过块处理数据块,其中总是将文件加载到存储器中,处理,然后从存储器中清除.此处理应该很快,因为用户可以更改某些设置,然后重新处理相同的数据,并且此用户交互应尽可能流畅.
现在从磁盘加载是一个相当大的瓶颈,我想在已确定将使用哪些文件的阶段预先加载数据.但是 - 如果我预加载太多数据,操作系统将使用虚拟内存,我将有大量的页面故障,使处理速度更慢.
如何确定要预加载多少数据以保持页面故障低?我可以以某种方式影响我想要保留在内存中的数据吗?
谢谢!
//编辑:我目前正在Windows 7 64上运行(但应用程序是32位)并且应用程序不需要在任何计算机上运行 - 仅在特定计算机上运行,因为这是一个研究项目.
对于一般情况下对大型二进制文件的随机访问,我会考虑使用本机操作系统文件内存映射 API。从性能角度来看,这很可能是最有效的解决方案,大多数操作系统中还有一个系统 API 可以用来锁定内存中的页面,但我不会使用它。当做更具体的事情时,在大多数情况下可以有一个智能索引来准确地知道什么在哪里,并由此解决大多数性能瓶颈。
是的,这并不神奇,如果您需要所有 10G RAM 可用(因为它们的访问频率相同),请在您的机器上选择 16GB RAM。
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |