在閱讀問題之前:
這個問題不是關於如何使用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