我有一个方法负责获取一个openGl三角形网格并将其转换为3ds文件。此方法称为exportShape()
。为了执行此转换,exportShape()
创建了一堆非常大的 vector 和hash_maps。当前,从exportShape()
的最后一行到调用exportShape()
的下一行代码可能需要5分钟。我敢肯定,所有这些时间都花在清空大量的局部变量上,因为如果我将所有局部 vector 和hash_maps移到全局范围内,该方法将立即出现,就像我期望的那样。
为什么我可以在短短几秒钟内填充所有这些本地数据结构,而将它们从堆栈中弹出却需要几分钟?如何优化离开exportShape()
并清理堆栈的过程?
编辑:
要删除的对象仅包含字符串, double 和整数-不含自定义析构函数。
我几乎解决了自己的问题。在 Release模式下运行可显着提高性能(〜20倍)。但是,该过程仍然挂起了几秒钟。还有什么可以做的吗?
最佳答案
第一个实例中的问题是您正在使用调试分配器,该分配器使用位模式(例如0xfdfdfdfd
)标记释放的内存,以帮助检测对释放的内存的访问。显然,这很花时间,因为它必须遍历所有释放的内存。
为了进一步加快速度,您可以使用范围分配器,例如Boost Pool Library;另请参阅Creating a scoped custom memory pool/allocator?