【发布时间】:2013-03-14 13:20:38
【问题描述】:
我有一个比较大的学术模拟软件(50个班)。用户选择一个包含 20 多个项目的配置文件。这些常量变量在整个仿真平台(几乎在每个类中)都使用。模拟每秒运行数十万个代理对象几次,因此性能很重要。
目前我使用单例设置类。我使用实例在程序启动时从文件中读取值到类中(我不想在每个其他类中添加对设置类的引用)。
1- 我最近运行了一个分析器,发现对 getInstance().getSomeSetting() 的过多调用影响了性能。
2- 每次我谈到单例使用时,都会受到很多谴责。
在这种情况下访问设置的最佳做法是什么?我应该为这 20 多个配置项使用全局变量吗?
【问题讨论】:
-
我不相信调用 gettter 会极大地降低性能(即使在调试模式下,但我敢肯定,你是在发布)。仅当您每次都在读取配置文件时(我认为您不是)。 “我应该为这 20 多个配置项使用全局变量吗?”。您的单音是一组全局变量。显示设置类的代码。
-
我知道单例被认为等于一个全局变量(但不完全是,因为我每次都调用两个函数)。单例类是一个标准类,我只读了一次文件。它不会极大地降低性能。它达到的性能超出了我的预期(比如 3-4% 左右)。
-
您多久致电一次
getInstance().getSomeSetting()?读取后是否将设置缓存在局部变量或类成员中? -
如果
getInstance定义在header 中并且get-functions 非常简单并且你也可以在header 中定义它们,那么编译器应该优化直接访问Settings类的适当成员的调用。或者,您可以通过使用inline指令标记 getter 来帮助编译器。只有当最少的代码(实际上是有用的计算)非常小时,我才能相信 3-4% -
@TAS:这就是重点。每次运行我都会使用它多次,导致每秒几十万次。是的,我将设置读入类变量(然后可以通过 setter/getter 访问)
标签: c++ configuration singleton global-variables application-settings