Время жизни статических переменных в .NET.

У меня есть метод расширения, который использует некоторые настройки конфигурации. Я объявила их как static.

public static class Extensions
{
    static string _mailServer = ConfigurationManager.AppSettings["MailServer"];
    // ... etc    

    public static void SendEmailConfirmation(this IOrder order) { }
}

Я просто хотел проверить, что это делает то, что я намереваюсь, поскольку я не уверен на 100%. Идея заключается в том, что я не хочу продолжать читать эти значения, я бы хотел, чтобы они читались один раз и кэшировались в течение всего срока действия веб-приложения. Это то, что произойдет? Благодаря

Ответ 1

(обновлено с разъяснением KeithS, что они не прочитаны до первого использования)

Они будут прочитаны при первом использовании, а затем сохраняются до тех пор, пока AppDomain не будет остановлен или не переработан, что, вероятно, вам нужно.

То есть приложения ASP.NET запускаются внутри AppDomain. Таким образом, они являются резидентными и доступны для нескольких запросов без необходимости запуска для каждого отдельного запроса. Вы можете настроить, как долго они будут жить и когда они будут перерабатываться, и т.д. Статические переменные живут и умирают вместе с приложением и, таким образом, выживут до тех пор, пока приложение будет находиться в домене приложения.

Ответ 2

_mailServer будет инициализирован при первом использовании класса Extensions (каким-либо образом). Он не будет установлен повторно, пока домен приложения не будет перезагружен.

Ответ 3

Они будут загружены в первый раз, когда они понадобятся, и будут оставаться в памяти до тех пор, пока IIS не переработает приложение.