Все ли экземпляры одной и той же страницы ASPX используют одно и то же статическое поле?

Давайте рассмотрим код программной части этой страницы:

public partial class Products : Page
{
    private static SomeClass SharedField;

    public Product()
    {
        // ... Some logic
    }
}

Все ли экземпляры Products страниц используют один и тот же SharedField, я знаю, что это основная концепция статических полей. Но на самом деле в этом случае? все пользователи могут иметь доступ (и не могут иметь свой собственный экземпляр) к одному и тому же статическому полю на уровне веб-сайта?

Если да, то в каких аспектах это будет использовать веб-разработчик? или это нерекомендуемая практика?


person Ken D    schedule 09.02.2011    source источник


Ответы (3)


Да, будет один экземпляр этого статического поля для всех пользователей, но только в рамках одного рабочего процесса. Если у вас есть веб-фермы / веб-сады, у каждой из них будет свой статический экземпляр. Если рабочий процесс перезапустится, вы получите новый статический экземпляр.

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

Что касается того, зачем это использовать, я не уверен, я никогда этого не делаю. Лучший пример, который я могу вам привести, - это встроенный статический HttpContext.Current, который дает вам доступ к запросам, ответам и т. Д.

person Greg    schedule 09.02.2011

SharedField будет доступен в одном экземпляре на протяжении всего жизненного цикла веб-сайта.

Чтобы узнать об этом немного больше, см. Этот ответ.

person Filip Ekberg    schedule 09.02.2011

Лучше всего сохранить ваш объект в состоянии Application.

Application["MyObject"] = new SomeClass();

person GavinH    schedule 09.02.2011
comment
Хотите верьте, хотите нет, но Microsoft рекомендует использовать вместо этого статические данные. stackoverflow.com/questions/4879023/ - person Greg; 10.02.2011
comment
Вау, это меня очень удивило! Я полагаю, что объект Application все равно был заменен объектом Cache. - person GavinH; 10.02.2011