2012-11-20 16 views
12

Czy ktoś wie, czy bierzesz hit wydajności dzwoniąc do metody CloudConfigurationManager GetSetting? Czy na przykład odtwarza plik lazurowy czy jest buforowany? Nie jestem pewien, czy powinienem dodać własną zmienną buforującą/statyczną, aby poprawić perf dla czegoś zwanego często jak ciąg połączenia.Czy pamięć podręczna metody GetSetting metody CloudConfigurationManager?

Dzięki

+0

Wystarczy rzucić okiem na metodę GetSetting za pomocą Reflektora i daj nam znać :) –

+1

Ha. Wysłałem, aby tego uniknąć. Nie jest to dla mnie najważniejszy priorytet, ale prawdopodobnie to zrobię i odeślę z powrotem, jeśli nic nie usłyszę od nikogo. – Bryan

+0

Nie sądzę, że buforowanie wartości. – Guy

Odpowiedz

11

source jest dostępny na github.

Jeśli przyjrzeć się źródłu, można zauważyć, że nie wykonuje on buforowania, więc jeśli występują problemy z wydajnością, może być konieczne zaimplementowanie własnego buforowania.

Ciało GetSetting pokazuje prosty zwrot:

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

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

return value; 
+0

Twoja odpowiedź mogłaby zostać poprawiona poprzez dodanie odpowiedniego fragmentu kodu ze źródła. W rzeczywistości Twój link nie jest już ważny. :( –

+0

Zaktualizowałem link, jest sporo kodu, który musisz przeczytać, aby zobaczyć, że to nie jest buforowanie prawdopodobnie zbyt wiele do wklejenia tutaj – Estyn

+0

Nie wygląda mi na to, że to cache, ale nie jest to oczywiste z kodu pisałeś, czy tak jest, to przekazuje wywołanie do 'GetServiceRuntimeSetting', które może buforować wartości dla wszystkich, których znam.Te – Rory

1

Nie, to nie jest buforowane, jak zasugerował trzeba by tworzyć własne buforowanie dla poprawy wydajności.

2

Przyjęta odpowiedź może nie być poprawna.

To prawda, że ​​sama CloudConfigurationManager nie buforuje, ale to dlatego, że wewnętrznie delegatów ConfigurationManager lub WebConfigurationManager, który zrobić cache wartości.

Od MSDN:

Dla <appSettings> i <connectionStrings>, użyć AppSettings i connectionStrings właściwości. Te metody wykonują operacje tylko do odczytu o wartości , używają pojedynczej instancji buforowanej konfiguracji i są wielowątkowe świadome .

tak, że nawet jeśli masz dostęp bezpośrednio z CloudConfigurationManager najprawdopodobniej nie byłoby operacji IO poniesienia.

Powiązane problemy