当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 访问配置属性的成本是多少?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在开发一个 Scala应用程序,它可以在10分钟的间隔内扫描一些文件夹.在我的课程中,我创建了12个全局变量,它有点奇怪,因为有些变量在异常点上只使用了一次. 我想知道使用成本是多
我正在开发一个 Scala应用程序,它可以在10分钟的间隔内扫描一些文件夹.在我的课程中,我创建了12个全局变量,它有点奇怪,因为有些变量在异常点上只使用了一次.

我想知道使用成本是多少:

configuration.getString(“value”)

每次改为创建一个全局变量,如:

private lazy val inputPath = configuration.getString(“main.directory”)

在性能方面,哪个更好?只在必要时调用或创建一个惰性全局变量?

预先感谢.

configuration.getString(“value”)非常便宜.配置将在启动时读取并解析一次,然后将值存储在 Java Map中.所以基本上调用getString归结为HashMap中的查找.这当然比共享变量更昂贵,但仍然具有恒定的复杂度O(1).它应该没问题,特别是每10分钟只调用一次getString几次.

可以在sources of typesafe/config on GitHub中找到参考的实现.行30是存储值的映射.

更新:今天早上我想到了你的问题,它突然让我感到震惊,为什么调用getString而不是用值初始化共享变量是一个坏主意.我没有立刻想到它,因为它与性能无关:

getString有副作用,即它可以在配置值不存在时抛出异常 – 例如,您的配置文件可能已损坏.由于通常没有针对此类异常的恢复策略,因此在没有人再观看的情况下,在启动时将这些潜在的失败而不是在几十分钟的时间内更好的做法会更好.

在你的问题中,你使用了一个懒惰的val作为替代方案,它将暴露于同样的问题,因为它只会在需要时进行评估.因此,在我看来,您应该在程序开头将所有配置值读入vals!

private val inputPath = configuration.getString("main.directory")

如果您使用回退值并且100%肯定没有例外,这当然不适用.

网友评论