C++"删除"很慢.我应该先在哪里看?

Dav*_*son 7 c++ memory-management

我有一个C++应用程序,其中"删除"功能运行缓慢.可能导致这种情况的原因以及我应该从哪里开始寻找解决方案?

背景:

此C++代码位于AutoCAD内部运行的ARX文件中,该文件基本上只是一个DLL.

删除速度慢的特定计算机正在运行AutoCAD 2011,Windows 7,64位.必须使用Visual Studio 2008 Service Pack 1编译ARX for AutoCAD 2011.

有问题的计算机是客户的计算机.它没有安装任何版本的Visual Studio.

在我的开发计算机上,代码在AutoCAD 2011中没有任何问题.

为了测试,我有一些删除链表的代码.在有问题的计算机上,删除列表需要0.7秒.在没有问题的计算机和配置上,相同的代码需要0.02秒.具体时间并不重要 - 两个数字之间的差异很大.

我确保在两台计算机上运行相同版本的代码,因此它不是发布版本与调试版本问题.

pet*_*hen 5

大概按顺序检查它们:

  • 其他插件:可能由其他ARX文件引起的行为?他们可以在糟糕的系统上被禁用吗?
  • PerfMon:在删除过程中检查软/硬页面错误或缓存未命中是否达到峰值(我希望您可以在客户计算机上进行设置).
  • HeapQueryInformation:在好/坏环境中的相同值?
  • 堆锁:其他一些线程可能在后台高度活跃,紧紧抓住堆的锁吗?您可以通过将循环包装在HeapLock/HeapUnlock中来测试(当然,锁定时间在锁内).
  • 钩子:各个代码可以挂钩吗?(例如,第三方应用程序挂钩到C++/Win32堆函数以执行它想做的任何事情)
  • 抓住稻草:各自new的需要花费多长时间?个人delete时间如何 分配?