在阅读问题之前:
这个问题不是关于如何使用dynamic_cast
。它只是关于它的表现。dynamic_cast的性能?
我最近开发了一个设计,其中dynamic_cast
用于很多。
当与同事讨论时,几乎所有人都说dynamic_cast
不应该使用,因为它的表现不好(这些人是不同背景的同事,在某些情况下彼此不认识,我在大公司)
我决定测试这种方法的性能,而不是仅仅相信它们。
下面的代码用于:
ptime firstValue(microsec_clock::local_time());
ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject);
ptime secondValue(microsec_clock::local_time());
time_duration diff = secondValue - firstValue;
std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl;
上述代码使用从boost::date_time
Linux上的方法,以得到有用的值。
我在一次执行中完成了3个dynamic_cast
,测量它们的代码是相同的。
1所执行的结果如下:
Cast1持续74微秒
硬脂酸钙持续:2微秒
CAST3持续:1微秒
第一铸造总是把74-111微秒,以下在同样的执行中投了1-3微秒。
因此最后我的问题:
是dynamic_cast
真的表现不好吗?
根据测试结果它没有。我的测试代码是否正确?
为什么这么多开发者认为如果它不是很慢呢?
我错过了什么吗?我看不到cast2或cast3的任何代码。 – Flexo 2010-10-29 10:17:24
谁能说什么不好?你的程序的表现是否足够好?如果是这样,那么表现并不差。动态总时间是否会占用执行时间的很大一部分?如果不是,那么首先担心其他事情。更一般地说,对于某些应用程序来说,74微秒的速度非常慢 - 在我上一份工作中,我已经收到并解析了股票交易所的整个更新记录,更新了数据库,并在一半时间内向客户端应用程序通知了它。如果你有兴趣,然后将其与其他方式进行比较,以获得相同的行为。 – 2010-10-29 10:27:23
在代码中有很多dynamic_casts是设计问题的一个明确标志。 – 2010-10-29 11:07:44