我正在尝试像这样读取大型二进制 LAS 文件
struct format
{
double X;
double Y;
double Z;
short red;
short green;
short blue;
short alpha;
unsigned long intensity
// etc.
}
std::ifstream stream;
Point3 GetPoint()
{
format f;
stream.seekg(offset);
offset += sizeof(format);
stream.Read((char *)f, sizeof(format));
return Point3(f.X, f.Y, f.Z);
}
在主要功能中:
Point3* points = new Point3[count]
for (int i = 0; i < count; i++)
points[i] = GetPoint();
此操作大约需要 116 秒,有 1800 万点记录。但在 LAS 工具中,读取和开始对相同数据进行可视化需要将近 15 秒。
它怎么能比我的快 7 倍?是多线程还是其他?如果我的阅读功能不好,怎么会差7倍呢?
我有一些关于内存映射文件的信息。将整个文件加载到内存非常快,但 LAS 文件可能超过 15GB,这超出了我的内存大小,因此它将被加载到虚拟内存。即使我有足够的内存,我也必须使用循环读取内存映射文件。
有人可以帮我解决这种情况吗?