【问题标题】:Does the CloudConfigurationManager GetSetting method cache?CloudConfigurationManager GetSetting 方法是否缓存?
【发布时间】:2012-11-20 18:05:47
【问题描述】:

有谁知道调用 CloudConfigurationManager GetSetting 方法是否会影响性能?例如,它是重新解析 azure 文件还是被缓存?不确定我是否应该添加自己的缓存/静态变量来提高性能,例如连接字符串。

谢谢

【问题讨论】:

  • 看看使用反射器的GetSetting方法并告诉我们:)
  • 哈。我张贴以避免这样做。这不是我的首要任务,但如果我没有收到任何人的任何消息,我可能会这样做并回帖。
  • 我不认为它在缓存值。
  • 可能更重要的问题是CloudConfigurationManager.GetSetting() 的性能是否值得在我们自己的应用程序中缓存设置值。我会对任何花时间测量它的人感兴趣..但对自己做的兴趣不够;)

标签: .net azure


【解决方案1】:

source 可在 github 上找到。

如果您查看源代码,您会发现它没有进行任何缓存,因此如果您发现性能问题,您可能需要实现自己的缓存。

GetSetting 的正文显示了一个简单的返回:

value = GetValue("ServiceRuntime", name, GetServiceRuntimeSetting);

if (value == null)
{
    value = GetValue("ConfigurationManager", name, n => ConfigurationManager.AppSettings[n]);
}

return value;

【讨论】:

  • 您的答案可能会通过从源代码中添加相关的代码片段来改进。事实上,您的链接不再有效。 :(
  • 我更新了链接,您必须阅读相当多的代码才能看到它没有缓存太多,无法粘贴到此处。
  • 在我看来它不像缓存,但从您发布的代码中看是否是这种情况并不明显。它将调用传递给GetServiceRuntimeSetting,这可能会缓存我所知道的值。
  • ConfigurationManager 缓存值,请参阅下面的答案。
【解决方案2】:

接受的答案可能不正确。

CloudConfigurationManager 本身确实不缓存,但这是因为它在内部委托给ConfigurationManagerWebConfigurationManager,它们缓存值

来自MSDN

对于 <appSettings><connectionStrings>,您使用 AppSettings 和 连接字符串属性。这些方法执行只读 操作,使用配置的单个缓存实例,并且是 多线程感知。

这样即使你直接从CloudConfigurationManager访问,也很可能不会产生IO操作。

【讨论】:

    【解决方案3】:

    不,它没有缓存,因为您建议您必须创建自己的缓存以提高性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多