【发布时间】:2010-08-04 15:53:23
【问题描述】:
我正在构建一个充满节点的大型 RTree(空间索引)。它需要能够处理许多查询和更新。对象不断地被创建和销毁。我正在运行的基本测试是随着树中对象数量的增加查看树的性能。我以 100 为增量插入 100-20000 大小均匀、随机定位的对象。搜索和更新与我目前面临的问题无关。
现在,当存在 NO 内存泄漏时,“插入树”性能无处不在。它从大约 15000 个对象的 10.5 秒到大约 18000 个对象的 1.5 秒不等。没有任何模式。
当我故意添加泄漏时,就像输入“new int;”一样简单我没有将它分配给任何东西,它本身就有一条线,性能立即下降到一个很好的平缓曲线,从 100 个对象的 0(大约)秒到 20k 的 1.5 秒倾斜。
此时非常非常失落。如果你想要源代码,我可以包含它,但它是 huuugggeeee 并且实际上唯一不同的行是“new int;”
提前致谢! -尼克
【问题讨论】:
-
您可能需要简化您的测试代码 - 发生了一些奇怪的事情,而且您可能看不到测试的复杂性。尝试使用更简单的数据结构运行类似的测试,然后从那里向上移动。
-
在我看来,您的问题出在其他地方,性能与
new int;之间的关系大多是偶然的。 -
您确定
new int;幸免于难吗? -
是的。通过大会。
-
您的速度下降了一个数量级?没有比简单地暂停它并查看它在做什么更容易查看问题所在的方法了。
标签: c++ performance memory-leaks