Какие методы следует использовать для обработки объектов в кэше asp.net, чтобы предотвратить проблемы с несколькими рабочими потоками asp.net?
Поскольку asp.net содержит несколько потоков, которые выполняются одновременно.
поэтому, если 2 потока обращаются к объекту (простому или сложному), который я получил из кэша httpptext asp.net.
не может ли это привести к проблемам с состоянием этого объекта, если эти 2 команды попытались изменить / прочитать его одновременно?
так, какие меры предосторожности я должен осуществить?
например, я думаю, может быть, блокировка объекта при работе с ним? (не вызывает ли это проблемы с производительностью?)
или, может быть, когда я получаю какой-то объект из кэша, я должен создать копию из него?
или, может быть, мне не нужно беспокоиться об этой проблеме вообще?
Спасибо
2 ответа
Вы должны решить это на основе контекста вашей проблемы, решение, которое подходит всем, здесь не сработает. Если вы только читаете данные, у вас не возникнет проблем с потоками. Если вы часто записываете данные, бессмысленно использовать кеш. Если что-то вроде смеси и кеширования помогает с производительностью и т. Д., То вам нужно либо прибегнуть к обычным методам синхронизации потоков (например, блокировки чтения читателей), либо, возможно, сделать ваш объект неизменным, когда изменения вашего объекта всегда создают новый объект. Этот выбор приводит к проблемам с многопоточностью, поскольку новый объект должен затем заменить старый объект в кеше.
За 5 с лишним лет проектов разработки ASP.NET я никогда не сталкивался с ситуацией, когда это вызывало беспокойство.
При этом... у вас точно не будет проблем с чтением каких-либо предметов. Если у вас есть объект, который вы хотите часто изменять, почему он находится в кеше для начала? Если вам не нужно часто изменять его, то блокировка объекта не будет проблемой производительности.