2012-11-20 80 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操作。