2012-11-20 42 views
12

有没有人知道如果你打一个性能命中调用CloudConfigurationManager GetSetting方法?它是否重新解析了azure文件,或者它是否被缓存?不知道我是否应该添加自己的缓存/静态变量来改进perf,通常称为连接字符串。CloudConfigurationManager GetSetting方法缓存吗?

感谢

+0

只需在使用反射器GetSetting方法偷看,让我们知道:) –

+1

哈。我发布,以避免这样做。这不是我的首要任务,但如果我没有听到任何人的消息,我可能会这样做,然后回复。 – Bryan

+0

我不认为它正在缓存价值。 – Guy

回答

11

source可在github。

如果你看看源代码,你可以看到它没有做任何缓存,所以如果你看到性能问题,你可能想要实现自己的缓存。

GetSetting身体给出了一个简单的回报:

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

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

return value; 
+0

通过从源代码添加相关代码片段,可以改进您的答案。事实上,你的链接不再有效。 :( –

+0

我更新了链接,有一段代码需要阅读才能看到它没有缓存可能太多,无法粘贴到这里。 – Estyn

+0

它看起来并不像我这样缓存,但从代码中不明显你发布是否是这种情况,它将调用传递给'GetServiceRuntimeSetting',它可以缓存我知道的所有值。 – Rory

1

不,它没有被缓存,如你所说,你就必须创建自己的性能改进缓存。

2

接受的答案可能不正确。

这是真的,CloudConfigurationManager本身并没有缓存,但是这是因为它内部委托给ConfigurationManagerWebConfigurationManager,这做缓存值

MSDN

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

因此,即使您直接从CloudConfigurationManager进行访问,很可能也不会发生IO操作。