30

对于与各种后端(sdl、gl、d3d 等)一起使用的 GUI API,我想将通用类型图像动态转换为可能发生的任何情况。

所以底线是,我每秒会进行大约 20 * 60fps 的动态投射。

动态演员表有多贵?我会注意到它对性能有明显的负面影响吗?我有哪些替代方案仍能保持可接受的性能水平?

4

3 回答 3

25

每秒1200dynamic_cast秒不太可能是主要的性能问题。在找到实际类型之前,您是对每张图像执行一个dynamic_cast还是执行一系列语句?if

如果您担心性能,实现多态性的最快方法是:

  • ---最快的 ---
  • 函数重载(仅编译时多态性)
  • CRTP(仅编译时多态性)
  • 标签,开关和静态转换(脆弱,不支持多级继承,维护头痛,因此不推荐用于不稳定的代码)
  • 虚函数
  • 访客模式(倒置虚函数)
  • ---几乎一样快---

在您的情况下,访问者模式可能是最佳选择。这是两个虚拟调用而不是一个,但允许您将算法实现与图像数据结构分开。

于 2011-04-17T15:47:09.950 回答
-1

您不能使用#define 定义自己的演员表,它在调试版本中使用dynamic_cast(所以您知道您的演员表是正确的)并在发布版本中进行简单的(MySubclass *)演员表,因此没有性能成本?

于 2011-04-17T15:14:44.693 回答
-1

在这种特殊情况下,您应该能够组织您的代码,以便 dynamic_cast 只需要一次。我想后端不会动态变化。

于 2011-04-17T16:07:07.600 回答