【发布时间】:2011-02-19 07:56:47
【问题描述】:
只是为了摆脱它......
Premature optimization is the root of all evil
Make use of OOP
etc.
我明白了。只是寻找一些关于某些操作速度的建议,我可以将它们存储在我的灰质中以供将来参考。
假设你有一个动画类。一个动画可以循环播放(一遍又一遍地播放)或不循环播放(播放一次),它可能有或没有唯一的帧时间,等等。假设有 3 个“非此即彼”属性。 请注意,Animation 类的任何方法最多会检查其中之一(即这不是 if-elseif 的巨大分支的情况)。
这里有一些选项。
1) 为上面给出的属性赋予布尔成员,并在播放动画时使用 if 语句检查它们以执行适当的操作。
- 问题:每次播放动画时都会进行条件检查。
2) 制作基础动画类,并派生其他动画类,如 LoopedAnimation 和 AnimationUniqueFrames 等。
- 问题:鉴于您有类似
vector<Animation>的内容,Vtable 会在每次调用播放动画时检查。此外,为所有可能的组合创建一个单独的类似乎代码臃肿。
3) 使用模板特化,并特化那些依赖于这些属性的函数。喜欢template<bool looped, bool uniqueFrameTimes> class Animation。
- 问题:问题在于你不能只为某些动画设置
vector<Animation>。也可能臃肿。
我想知道这些选项提供了什么样的速度?我对第一个和第二个选项特别感兴趣,因为第三个选项不允许遍历Animations 的一般容器。
简而言之,什么更快 - vtable fetch 或条件?
【问题讨论】:
-
尝试自己测试一下。
-
这些属性的实际值是在运行时还是在编译时确定的?例如,如果您要加载用户指定的文件,那么属性当然是在运行时确定的。如果动画是程序附带的预先确定的,那么这些值在编译时是已知的。那么,您处理的是哪种情况?
标签: c++ optimization performance conditional vtable