由于用到的txt存放的数据有几十万行,用getline来读取文件非常慢,搜索了一下可以来优化读取文件的方法。
据说用内存映射读取文件速度快,试了一下,但是发现要分行处理数据时,速度还是挺慢的。
有关内存映射的介绍,参考别人博客。
http://blog.youkuaiyun.com/wcyoot/article/details/7363393
/////////////////////////////////////////////////////////////////////////////
///创建镜像文件来读取文件,提高速度
///////////////////////////////////////////////////////////////////////////
void useMapFileReadText(){
HANDLE hFile = NULL, hFileMap = NULL;
char * lpbMapAddress = NULL;
int nFileSize = 0, nLeftSize = 0;
if(hFile == NULL)
{
hFile = CreateFile("data.txt", GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
printf("打开文件失败");
}
}
if(hFileMap == NULL)
{
hFileMap=CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if(hFileMap==NULL)
{

针对几十万行的txt文件,getline读取效率低下。文章探讨了使用内存映射作为优化读取速度的方案,但发现在处理行数据时速度并不理想。内存映射通过减少IO操作提升效率,尤其适用于大文件处理。虽然可以实现多个进程间的数据共享,但在按行处理时可能不如getline快速。
最低0.47元/天 解锁文章
6598

被折叠的 条评论
为什么被折叠?



