在C ++ Windows中并行读取内存映射文件

时间:2017-03-09 15:29:57

标签: c++ windows multithreading memory-mapped-files

这更像是一个概念性问题。我一直在努力击败fread的性能和流读取文件(1Million +行)的C ++,它有多种数据类型。例如,文件在每行中包含int个,float个和string个。

经过研究,我决定采用内存映射路由,因此我做了CreateFileCreateFileMappingMapViewOfFile。围绕对象包装整个映射过程以访问指向映射文件的指针,这样我就可以调用此对象并从另一个函数访问映射文件指针。

我能够成功读取文件,但性能不如预期。事实上,使用fread没有任何好处。我再次连续阅读,所以我认为这是主要问题。

我的问题是如何平行阅读过程?我首先考虑使用intel TBBopenMP来保持简单,但我相信这可能会导致无法正确对齐行结尾等问题,

所以替代方法是使用线程池和阻塞机制,让每个线程读取不同的映射内存块。这对提高性能有帮助吗?如果有人遇到类似问题,还有其他建议吗?或者如何在内存映射文件中执行此操作。

我也对C ++中Windows的其他并行文件读取方法持开放态度。

0 个答案:

没有答案