проблема с одновременными пользователями, когда данные хранятся в списках, определенных как общедоступные статические - PullRequest
1 голос
/ 04 марта 2011

У меня есть веб-проект, в котором у меня есть различные функции, которые либо добавляют значения в серию списков, которые определены как общедоступные статические (чтобы они по сути выступали в качестве глобальных переменных), либо считывают их.

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

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

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 04 марта 2011

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

2 голосов
/ 04 марта 2011

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

1 голос
/ 04 марта 2011

статические элементы обычно должны быть a: минимизированы и b: потокобезопасны.В любом многопоточном сценарии вы в противном случае подвергаетесь большому риску проблем с параллелизмом, а ASP.NET очень, очень многопоточен.статический список обречен на провал.У меня может есть список private и некоторые статические вспомогательные методы, которые lock(someLock) и получают определенный элемент и т. Д., Но я долго смотрю на него, чтобы решить, будет ли он "пахнет».Также обратите внимание, что static не работает хорошо с многопользовательским режимом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...