我需要实时抓取大量数据(4-8 8Gb),而不会丢失任何数据。
旧系统几乎可以跟上将数据写入条带RAID阵列的速度,但数据变得更大、更快,比磁盘变得更快(!)所以我没有时间访问磁盘。
新的计划是切换到Win64,安装大量的ram,将传入的数据填充到缓冲区中,然后在最后将其全部写入。
所以我在找:
一个windows API,它将new[]限制在物理内存中,并将页面锁定到物理内存中,或者我只是禁用页面文件。
或者我使用内存映射文件,并在结束时关闭文件时强制同步。有没有一个内存映射文件标志,可以在我准备好之前阻止写操作?
发布于 2011-11-26 02:41:47
你需要做的就是重载操作符new,并自己分配和锁定内存。
发布于 2011-11-26 03:14:59
您可以使用MEM_LARGE_PAGES
参数调用VirtualAlloc,而不是使用普通的老式VirtualAlloc
并自己锁定页面。不过,您需要预先设置一些设置:See here
默认情况下,大页面是不可分页的,并且显然更有效地增加了wrt开销。注意,在碎片化的堆上,大页面的分配时间可能会出现问题。您可能还想阅读this。
发布于 2011-11-26 02:15:44
一种快速的方法是在整个系统范围内禁用系统分页文件。您可以为您的数据创建一个仅使用物理内存的特殊堆,但负责管理小块数据的内存管理的新/删除内容通常使用进程堆。使用win中的HeapCreate()函数。现在,您必须获取new/delete才能使用该堆。
https://stackoverflow.com/questions/8272823
复制相似问题