单例模式性能问题
Singleton Pattern performance issue
我正在审查一段现有的代码,它使用了很多单例类和访问。我正在努力提高这段代码的性能。
我想到的一件事是优化Singleton::getInstance()代码。比起使用Singleton::getInstance(),我更倾向于用两个调用的结构来代替它。
。创建和准备单例实例的函数,如singleton::prepareInstance(),将在子系统开始时调用一次。b. getInstance()的内联实现,它只返回引用而不检查它是否有效。
这是一个可行的解决方案吗?有什么改进的方法吗?
当前的Singleton::getInstance()代码是这样的
Singleton * Singleton::getInstance() {
if(m_instance == NULL) {
m_instance = new Singleton();
}
return m_instance;
}
π α ντα ρ ε ν提到的方法更快吗?
b。getInstance()的内联实现,只返回引用而不检查它是否有效。
为什么需要检查有效性?我的单例GetInstance()
实现通常是这样的:
Singleton& Singleton::instance() {
static Singleton theInstance;
return theInstance;
}
我怀疑这样的代码应该有任何性能影响,也没有必要检查任何内容的有效性。
正确的Singleton::getInstance()
实现不应该有任何性能问题。当然,第一次调用可能是昂贵的(对于单例实例的初始设置),但任何后续调用应该简单地返回实例,这应该是超级快。
b。getInstance()的内联实现,只返回引用而不检查它是否有效。
在我看来,这违背了单例模式的一个基本概念。Singleton::getInstance()
应该总是返回一个有效的实例
在进行优化之前使用分析器。它通常会揭示运行时花费在哪里。在您的示例中,它很可能不是单例的getInstance方法,因为这些方法可能是内联的,分支预测将消除if语句的成本。如果结果是性能问题,这将是删除单例并改进体系结构的好借口。如果没有,请使用Meyer的单例模式(如果需要考虑多线程,仅适用于c++ 11)。
- 在类中使用随机生成器时出现性能问题
- Qt OpenGL 渲染到纹理性能问题
- 剪辑性能问题
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- OpenCV - 基本操作 - 性能问题 [模式:发布]
- 使用 #define 进行跟踪日志记录以避免性能问题
- 在 Qt C++ 中在自定义项委托上绘制文本时的性能问题
- std::函数有性能问题,如何避免?
- 使用 const double* const 作为模板参数 - 代码性能问题
- 在C 中读取大型CSV文件性能问题
- MPI 二进制文件 I/O 基本功能和性能问题
- 如何修复macOS线程互斥锁性能缓慢的问题?
- 使用STD :: MAP在数据及其性能问题中查找重复项.我可以预先分配吗?
- C 功能性能问题
- 一维数组映射方式的性能差异问题
- 在C 性能问题中使用Getter返回地图
- 初始化每个班级成员时的性能问题
- 事件(开始,结束),1天的最大事件.C++ 中的性能问题
- 在X64模式下从C /CLI调用MASM PROC会产生意外的性能问题
- OpenGL:MESA3D屏幕上的软件渲染性能问题