这两种存储多个静态管理器的方式中哪一种最能提高性能?

时间:2019-03-26 14:28:44

标签: c++ design-patterns

这两个设置在内存使用和性能方面是否相等?

我目前正在使用singeltons访问系统中的不同管理器。但是我注意到,singelton Get()函数占据了相当一部分性能,因为它们经常被调用。 (我认为编译器会对此进行优化,但显然不是)

所以我开始寻找改变这一点的方法。

一种方法就是将它们置于大型共享状态类中。 但我仍在努力并修改这些经理。因此,我想向前声明它们,以避免重新编译(完全重新编译大约需要15分钟)。

但是,尽管如此,我还是没有“新手”将它们置于另一个记忆位置。与声明的静态非指针变量不同。

问题1:就性能而言,这两种解决方案如何相互比较?

问题2:它们比简单的单例模式更快吗?

////////////////////////////////////////////////////////////
// Way 1: Shared State
////////////////////////////////////////////////////////////
// .h

class SharedState
{
    // Just put all managers here
    static ObjectManager1 manager1;
    static ObjectManager2 manager2;
    static ObjectManager3 manager3;
    static ObjectManager4 manager4;

    // Class things
}


////////////////////////////////////////////////////////////
// Way 2, Shared State (With pointers)
////////////////////////////////////////////////////////////
// .h 

class SharedState
{
    // Just put all managers here
    static ObjectManager1* manager1;
    static ObjectManager2* manager2;
    static ObjectManager3* manager3;
    static ObjectManager4* manager4;
}

// .cpp
ObjectManager1* SharedState::manager1 = new ObjectManager1();
ObjectManager2* SharedState::manager2 = new ObjectManager2();

编辑: 方式3:这应该使它们不由堆内存创建吗?并且仍然允许向前拒绝。

////////////////////////////////////////////////////////////
// Way 3
////////////////////////////////////////////////////////////
// .h 

class SharedState
{
    // Just put all managers here
    static ObjectManager1* manager1;
    static ObjectManager2* manager2;
    static ObjectManager3* manager3;
    static ObjectManager4* manager4;
}

// .cpp`
// Defines them static/global here 
static ObjectManager1 g_Manager1;
static ObjectManager2 g_Manager2;
static ObjectManager3 g_Manager3;

// Set the class ptrs
static SharedState::ObjectManager1* manager1 = &g_Manager1;
static SharedState::ObjectManager2* manager2 = &g_Manager2;
static SharedState::ObjectManager3* manager3 = &g_Manager3;

0 个答案:

没有答案