Время жизни статических переменных в .NET - PullRequest
10 голосов
/ 28 сентября 2010

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

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

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

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

Ответы [ 3 ]

16 голосов
/ 28 сентября 2010

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

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

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

1 голос
/ 28 сентября 2010

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

1 голос
/ 28 сентября 2010

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

...