ldl*_*ina 5 c++ string performance function visual-c++
我遇到了C++函数性能问题,使用下面的代码进行测试.的的实现queryInterface和queryInterface1几乎相同.唯一的区别是queryInterface调用classType函数和classType函数调用classType1,直接queryInterface1调用classType1.表现queryInterface1不好,需要两倍的时间queryInterface.有什么问题queryInterface1,为什么?用MSVC编译.查看控制台中的输出:
queryInterface()的时间成本:2453
queryInterface1()的时间成本:4961
#include <string>
#include <time.h>
#include <iostream>
#include <unordered_map>
using namespace std;
namespace
{
int find(const string& name)
{
return 0;
}
class A
{
public:
static int classType();
static int classType1();
virtual void* queryInterface(int id) const
{
if (A::classType() == id)
return const_cast<A*>(this);
return nullptr;
}
virtual void* queryInterface1(int id) const
{
if (A::classType1() == id)
return const_cast<A*>(this);
return nullptr;
}
};
int A::classType()
{
static int s_classType = classType1();
return s_classType;
}
int A::classType1()
{
static int s_classType = find("A");
return s_classType;
}
}
int main()
{
clock_t start, stop;
const size_t count = 1000000000;
A* pA = new A;
start = clock();
for (size_t i = 0; i < count; i++)
{
pA->queryInterface(A::classType());
}
stop = clock();
cout << "time cost of queryInterface(): " << stop - start << endl;
start = clock();
for (size_t i = 0; i < count; i++)
{
pA->queryInterface1(A::classType1());
}
stop = clock();
cout << "time cost of queryInterface1(): " << stop - start << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)