У меня есть сервер, который обрабатывает несколько входящих соединений сокетов и создает 2 разных потока, которые хранят данные в формате XML.
Я использовал инструкцию lock
для безопасности потоков почти в каждом обработчике событий, называемом асинхронно, и в двух потоках в разных частях кода. К сожалению, с помощью этого подхода мое приложение значительно замедляется.
Я попытался вообще не использовать lock
, и сервер работает очень быстро, даже файловое хранилище, похоже, увеличивает; но программа вылетает по причинам, которые я не понимаю после 30 секунд - 1 мин. работы.
Итак. Я думал, что лучший способ - использовать меньше замков или использовать его только там, где это строго необходимо. Таким образом, у меня есть 2 вопроса:
-
Является ли блокировка необходимой, когда я пишу только общедоступным переменным (спискам С#) или даже когда я их читаю?
-
Является ли блокировка необходимой только в асинхронных потоках, созданных обработчиком сокета или в других местах?
Кто-то может дать мне некоторые практические рекомендации, о том, как действовать. На этот раз я не буду публиковать весь код. Не имеет смысла размещать около 2500 строк кода.