不要在DEBUG模式下使用STL实现"复杂的"算法

原创 2006年06月05日 22:26:00

在DEBUG模式下,使用CPU计算的骨骼动画总是很慢,当游戏中角色数目多的时候只有几帧,严重影响工作效率。今天测试了一下,774个顶点的模型在DEBUG下混合需要10ms,RELEASE下只需要0.3ms,DEBUG比RELEASE慢了30倍。

部分代码如下:
 for( int i = 0; i < iNumBaseVertex; ++i )
 {
  v3dBlendInfo   &bi = m_BlendInfoVec[i];
  const v3dxVector3  position = m_UsingBasePosVec[i];
  const v3dxVector3  normal = m_UsingBaseNormalVec[i];

  for( int j = 0; j < bi.iEffectBoneCount; ++j )
  {
   // 顶点混合
  }
 }

做了如下修改后,DEBUG下只需1ms,RELEASE没变化,还是0.3ms:
 v3dBlendInfo *pBlendInfoVec  = &m_BlendInfoVec[0];
 v3dVector3 *pUsingBasePosVec  = &m_ UsingBasePosVec[0];
 v3dVector3 *pUsingBaseNormalVec  = &m_ UsingBaseNormalVec[0];
 for( int i = 0; i < iNumBaseVertex; ++i )
 {
  v3dBlendInfo   &bi = pBlendInfoVec[i];
  const v3dxVector3  position = pUsingBasePosVec[i];
  const v3dxVector3  normal = pUsingBaseNormalVec[i];

  for( int j = 0; j < bi.iEffectBoneCount; ++j )
  {
   // 顶点混合
  }
 }

总结:DEBUG下STL容器的运算符(如[])都是函数调用,如果在多次循环内部做这些操作会严重影响效率。以后遇到这种情况可以先用STL将算法调正确,然后替换成快速的数组操作方便调试。RELEASE下STL许多函数都被INLINE,所以两种做法效率差不多。


谁有更好的办法, 一定要共享一下,嘿

不要在DEBUG模式下使用STL实现"复杂的"算法

在DEBUG模式下,使用CPU计算的骨骼动画总是很慢,当游戏中角色数目多的时候只有几帧,严重影响工作效率。今天测试了一下,774个顶点的模型在DEBUG下混合需要10ms,RELEASE下只需要0.3...
  • freedomsky120
  • freedomsky120
  • 2007年12月24日 12:01
  • 364

【java performance】避免在循环条件中使用复杂表达式

在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。   例子: import java.util.Vector; cla...
  • guotong1988
  • guotong1988
  • 2014年02月21日 15:36
  • 749

eclipse中的debug模式的使用

最基本的操作是: 1, 首先在一个java文件中设断点,然后debug as-->Android Application 当程序走到断点处就会转到debug视图下, 2、 F5键与F6键均为...
  • DevelopAndroid
  • DevelopAndroid
  • 2015年04月28日 09:50
  • 856

Visual Studio中Debug与Release编译模式的区别以及Preprocesor directives的使用

在Visual Studio中,最基础的编译模式有2中,Debug与Release.这也是默认的两种方式,在新建一个project的时候,这两种模式就已经存在。 我们也可以点击那个Con...
  • sundacheng1989
  • sundacheng1989
  • 2015年12月29日 14:56
  • 1472

如何使NSLog只在Debug模式下有效

1#ifndef __OPTIMIZE__    2#define NSLog(...) NSLog(__VA_ARGS__)    3#else    4#define NSLog(...) ...
  • u010105969
  • u010105969
  • 2016年02月27日 21:53
  • 1265

Delphi Debug模式下可以但是Release模式下报错原因之一

今天上午才遇到的一个问题,Delphi的DLL调用C编写的dll(不太确定是不是C语言),在debug模式下运行好好的,切换到release模式下竟然无法正确返回?这个DLL在我们的其他exe程序中调...
  • yueyun889
  • yueyun889
  • 2017年11月02日 15:35
  • 477

Android Studio 教你在debug调试模式下使用正式签名

这个问题是我在配置QQ第三方登陆时遇到的,QQ第三方登陆如果上传正式发布包到腾讯应用宝,也就是正式版的签名,测试三方登陆时也只能用正式签名测试,对于开发者来说,实在太痛苦了,因为开发者做测试都是运行起...
  • u011459799
  • u011459799
  • 2016年04月18日 19:10
  • 5633

【iOS开发-115】静态库的制作以及第三方框架iOS Universal Framework,DEBUG和RELEASE

静态库的样子就是用户拿到的文件有很多头文件.h+资源包+编译过的一个二进制文件.a(.framework)。即没有公开的那些文件都被编译进了.a或.framework里面。如果是为了保护知识产权什么的...
  • wsb200514
  • wsb200514
  • 2015年01月29日 16:20
  • 3019

STL算法之copy

STL算法之copy copy 使用必须包含头文件 由于copy进行的是复制操作,而复制操作不外乎assignment operator和copy constructor(copy算法用的是前者),但...
  • walkerkalr
  • walkerkalr
  • 2014年04月15日 10:02
  • 909

Debug和Release模式下加载不同的库文件

打个比方,程序中 //Debug模式下,我要加载lib_d.dll文件 #pragma comment(lib,"lib_d.lib") //Release模式下,我要加载lib.dll文件 ...
  • lunweiwangxi3
  • lunweiwangxi3
  • 2015年03月19日 11:08
  • 1176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不要在DEBUG模式下使用STL实现"复杂的"算法
举报原因:
原因补充:

(最多只允许输入30个字)