C++函数性能问题

ldl*_*ina 5 c++ string performance function visual-c++

我遇到了C++函数性能问题,使用下面的代码进行测试.的的实现queryInterfacequeryInterface1几乎相同.唯一的区别是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)