【发布时间】:2011-01-20 21:19:20
【问题描述】:
我有一个 C++ 应用程序,其中“删除”功能运行缓慢。什么可能导致这种情况,我应该从哪里开始寻找解决方案?
背景:
此 C++ 代码位于 AutoCAD 内部运行的 ARX 文件中,基本上只是一个 DLL。
删除速度较慢的特定计算机正在运行 AutoCAD 2011、Windows 7、64 位。 AutoCAD 2011 的 ARX 必须使用 Visual Studio 2008 Service Pack 1 进行编译。
有问题的计算机是客户的计算机。它没有安装任何版本的 Visual Studio。
在我的开发计算机上,代码在 AutoCAD 2011 中没有任何问题。
为了测试,我有一些删除链表的代码。在有问题的计算机上,删除列表需要 0.7 秒。在没有问题的计算机和配置上,相同的代码需要 0.02 秒。具体时间并不重要——两个数字之间的差异很大。
我确保在两台计算机上运行相同版本的代码,因此这不是发布与调试构建问题。
【问题讨论】:
-
列表中有多少项,它们的大小是多少?
-
分享您用于基准测试的测试代码。
-
您确定不比较调试和发布版本吗?相差35倍!
-
我已为问题添加了更新以响应 cmets。是的,链表很糟糕,但这就是 AutoCAD 库用于传递数据的方法,所以我要处理它。
-
您需要在问题计算机上安装分析器,无论是侵入式(在程序中)还是使用外部程序。无论哪种方式,对假程序进行基准测试都是没有用的,尤其是您应该使用的
std::list和std::string的手写实现。 (当然,std::list可以说是更糟糕的容器,但它确实证明了delete的问题,如果这确实是问题的话。)
标签: c++ memory-management