上周我将递归 Branch&Cut 算法从 Matlab 移植到 C++,并希望看到求解时间显着减少,但尽管听起来令人难以置信,但情况恰恰相反。现在我并不是真正的 C++ 专家,所以我下载了 sleepy profiler 并试图找到潜在的瓶颈。我想问一下我是否从中得出正确的结论,或者我是否正在寻找一个完全错误的方向。
我让代码运行了 137 秒,这就是分析器显示的内容(下面还有许多其他条目,但它们无关紧要):
所以如果我做对了,98 秒用于创建新对象,34 秒用于释放内存(即删除对象)。
我会检查我的代码,看看哪里可以做得更好,但我也想问你是否有任何关于导致这种行为的常见错误或坏习惯的提示。我想到的一件事是我在代码中使用了很多临时的 std::vectors 来计算东西,所以这可能会很慢。
为了防止你失明,在我仔细查看之前我不会发布我的代码,但如果我不能自己解决这个问题,我会回来的。