这更像是一个概念性问题。我一直在努力击败fread
的性能和流读取文件(1Million +行)的C ++,它有多种数据类型。例如,文件在每行中包含int
个,float
个和string
个。
经过研究,我决定采用内存映射路由,因此我做了CreateFile
,CreateFileMapping
和MapViewOfFile
。围绕对象包装整个映射过程以访问指向映射文件的指针,这样我就可以调用此对象并从另一个函数访问映射文件指针。
我能够成功读取文件,但性能不如预期。事实上,使用fread
没有任何好处。我再次连续阅读,所以我认为这是主要问题。
我的问题是如何平行阅读过程?我首先考虑使用intel TBB
或openMP
来保持简单,但我相信这可能会导致无法正确对齐行结尾等问题,
所以替代方法是使用线程池和阻塞机制,让每个线程读取不同的映射内存块。这对提高性能有帮助吗?如果有人遇到类似问题,还有其他建议吗?或者如何在内存映射文件中执行此操作。
我也对C ++中Windows的其他并行文件读取方法持开放态度。