平時用dynamic_cast,但是一直沒有考慮過性能。但是性能怎么樣,還真沒想過。下測試就是一段測試程序,在linux下跑。
循環2億次,用dynamic_cast<XTestEx *>()的時候是2.39978秒,用(XTestEx *)直接轉的時間是0.723503秒。如果加上附加代碼帶來的誤差。dynamic_cast<XTestEx *>()費時是(XTestEx *)的近4倍.但總的來說,性能影響不大!
#include <iostream>#include<sys/time.h>
using namespace std;
class XTestBase
{
public:
virtual ~XTestBase(){}
virtual int getValue() = 0;
};
class XTestEx : public XTestBase
{
public:
virtual ~XTestEx(){}
virtual int getValue()
{
return 100;
}
};
int main(int argc, char * argv[])
{
struct timeval st1,st2;
XTestBase * pB = new XTestEx();
int iC = 0;
gettimeofday(&st1, NULL);
for(int i = 0; i < 200000000; i++)
{
XTestEx * p = dynamic_cast<XTestEx *>(pB);
iC += p->getValue();
}
gettimeofday(&st2, NULL);
long long diff = 1000000ll * (st2.tv_sec-st1.tv_sec)+ st2.tv_usec-st1.tv_usec;
cout<<"diff:"<<(diff/1000000.0)<<endl;
gettimeofday(&st1, NULL);
for(int i = 0; i < 200000000; i++)
{
XTestEx * p = (XTestEx *)pB;
iC += p->getValue();
}
gettimeofday(&st2, NULL);
diff = 1000000ll * (st2.tv_sec-st1.tv_sec)+ st2.tv_usec-st1.tv_usec;
cout<<"diff:"<<(diff/1000000.0)<<endl;
return 0;
}