singleton的延迟初始化问题
Problems with lazy initialization of singleton
我想创建具有如下行为的singleton类。
- 我的程序资源非常有限,所以在需要之前我不想创建singleton实例。(惰性初始化)
- Singleton类非常庞大,因此初始化需要很长时间
- 响应时间在这个程序中很重要。(喜欢游戏)
但正如你所知,1&2&3是相互冲突。在这种情况下,我必须选择其中一个(内存或性能)
该程序有什么解决方案可以满足内存&性能要求?
"程序是否有任何解决方案可以满足内存和性能要求?"
无论如何,都需要满足这些要求。为了确保singleton类的惰性实例化,我建议使用scott-meyer的singleton实现来保证惰性/线程安全初始化,如下所述:
class Singleton {
public:
static Singleton& Instance() {
static Singleton theInstance;
return theInstance;
}
delete Singleton(const Singleton&);
delete Singleton& operator=(const Singleton&);
private:
Singleton() {}
};
关于内存消耗,您必须以不同的方式对其进行优化。实际上,我不知道你在哪里有可能缩小你的内存足迹。到目前为止,你的问题还没有得到足够的信息。
"但正如你所知,1&2&3是相互冲突的。在这种情况下,我必须选择其中一个(内存或性能)"
我看不到任何实际的冲突??第一次访问Singleton::Instance
时可能会对性能造成影响,但随后的访问不会触发初始化,那又怎样呢?
很难说,因为您没有给出太多细节。您的内存和磁盘资源是否有限?singleton类初始化需要时间,是因为它很大,还是因为它必须进行多次计算?多长时间多少钱?多少是巨大的?什么是有限的资源?
如果您有磁盘空间,并且读/写磁盘相对较快,如果您可以在程序初始化期间花费一些时间,您可以创建类并将其序列化到磁盘(并保留该文件锁定),然后在内存不足的情况下在需要时从那里读取实例。或者在另一个线程中创建singleton,并在主线程中做一些其他事情。
相关文章:
- C++转换参数初始化问题
- 运行时C++数组初始化问题
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- C++初始化具有 int 0 问题的unique_ptr
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- 在构造函数 c++ 中初始化属性时出现问题
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- shared_ptr类的向量的向量初始化问题
- public:静态常量字符串声明/初始化问题
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 true 初始化布尔数组时出现问题
- 为什么C++中的大括号初始化可以解决STL容器的初始化问题
- 程序在没有输入的情况下退出,它有基本的,驱动的类属性初始化问题
- C++中构造函数的对象初始化出现问题
- 初始化com对象的问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 理解向量初始化时出现问题