我知道这些话题经常存在。但是我无法解释自己的结果很慢。
我的任务:从文件中读取每秒2.2M点数(更好)并在3d OpenCv窗口中显示它们。
我尝试以不同的方式阅读:
我有一个SSD并在发布模式下运行。 所以我认为它不能成为一个瓶颈问题。
它是一个二进制文件,我使用float。系统是32位,我将获得2Byte值。
我的错误是什么?请给我一个建议。 我的代码用于读取球面坐标系(phi,theta,distance)
全球
Point *pvertex=nullptr;
pvertex=new Point[pointsToShow];
readPoints()
RealTime=clock();
std::ifstream FFile;
FFile.open ("read.txt",std::ifstream::in|std::ifstream::binary);
while (FFile!=NULL)
{
FFile.read((char *)&fphi,sizeof(float));
FFile.read((char *)&ftheta,sizeof(float));
FFile.read((char *)&fdistance,sizeof(float));
pvertex[position].x = fdistance* sin(ftheta)*cos(fphi);
pvertex[position].z = fdistance* sin(ftheta)*sin(fphi);
pvertex[position].y = fdistance* cos(ftheta);
position++;
}
clock_t ende=clock();
if(ende-RealTime>0)
printf("%lld\n", (long long)(ende-RealTime+(pointsToShow/(ende-RealTime))*1000));
答案 0 :(得分:1)
您可以在Linux上read()
,在Windows上fstream
创建内存映射,而不是使用mmap
和CreateFileMapping
。
通过这种方式,您可以像访问内存(直接来自操作系统磁盘缓存)一样访问数据,而不是将较小的块读取并复制到用户模式缓冲区。