Где статическая переменная работает на странице ASP.NET?

У меня было интервью сегодня, и каждое дело шло очень хорошее, но затем интервьюер задал мне вопрос, Где Статическая переменная Работает в C#-На Прикладном уровне или На Уровне Страницы.

Я очень не согласился с этим ответом, поскольку я только знал, что статические переменные хранятся на "куче", и я не сделал знал что-либо о связанной с сетью вещи.

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

13
задан Shantanu Gupta 29 April 2012 в 20:33
поделиться

3 ответа

Если это не [ThreadStatic] , статическая переменная будет иметь только одно значение для каждого домена приложения.

В ASP.Net каждое приложение имеет свой собственный AppDomain, поэтому статические переменные будут использоваться всеми запросами в приложении. Это то, что имел в виду интервьюер - использование статических переменных в приложениях ASP.Net - это распространенная ошибка, которая может привести к загадочным ошибкам повреждения при одновременном выполнении нескольких запросов.

20
ответ дан 1 December 2019 в 21:24
поделиться

После того, как одна страница изменит значение, все остальные страницы получат обновленное значение.

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

Однако в веб-приложении ваш код может запускаться в нескольких потоках в одном домене приложений . Разработчики иногда удивляются, когда разделяют ценность.

Если вы хотите, чтобы значения были разными (обычно это так), вы можете принудительно использовать атрибут ThreadStatic . Разные веб-запросы находятся в разных потоках, поэтому они не будут знать друг друга. Я никогда не использую это, так как я не доверяю сборщику мусора избавиться от значения перед вызовом следующей страницы, который может повторно использовать тот же поток. Точно так же я бы не стал доверять статическим переменным для целенаправленного обмена значениями между потоками asp.net; используйте серверную переменную .

4
ответ дан 1 December 2019 в 21:24
поделиться

Статические переменные в C # с ASP.NET работают на уровне приложения.

Что касается того, какое значение они получат, это зависит от того, будут ли они обращаться к переменной до или после того, как страница обновит статическую переменную. Если они получат значение до изменения статической переменной, они увидят старое значение. Если они получат значение после изменения статической переменной, они получат новое значение. Статические переменные могут вызывать проблемы в ASP.NET, я бы посоветовал использовать их только для постоянных значений или для неизменяемых классов только для чтения.

2
ответ дан 1 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: