Какие методы следует использовать для обработки объектов в кэше asp.net, чтобы предотвратить проблемы с несколькими рабочими потоками asp.net? - PullRequest
1 голос
/ 09 сентября 2010

, поскольку asp.net содержит несколько потоков, которые выполняются одновременно.
поэтому, если 2 потока обращаются к объекту (простому или сложному), который я получил из кэша httpcontext asp.net.
не может ли это привести к проблемам с состоянием этого объекта, если эти 2 команды попытались изменить / прочитать его одновременно?
так, какие меры предосторожности я должен осуществить?
например, я думаю, может быть, блокировка объекта при работе с ним? (разве это не вызывает проблем с производительностью?)
или, может быть, когда я получаю какой-то объект из кэша, я должен создать копию из него?
или, может быть, мне вообще не нужно беспокоиться об этой проблеме?
спасибо

Ответы [ 2 ]

0 голосов
/ 09 сентября 2010

Вы должны решить это, исходя из контекста вашей проблемы, решение, подходящее всем, не подойдет.Если вы только читаете данные, у вас не возникнет проблем с потоками.Если вы часто пишете данные, бессмысленно использовать кеш.Если это немного смешано и кэширование помогает с производительностью и т. Д., То вам нужно либо прибегнуть к обычным методам синхронизации потоков (например, блокировки чтения читателей), либо, возможно, сделать ваш объект неизменным, когда изменения вашего объекта всегда создают новый объект.Этот выбор приводит к проблемам с многопоточностью, поскольку новый объект должен затем заменить старый объект в кэше.

0 голосов
/ 09 сентября 2010

За 5 с лишним лет проектов разработки ASP.NET я никогда не сталкивался с такой ситуацией, когда это вызывало бы беспокойство. чтение любые предметы.Если у вас есть объект, который вы хотите часто изменять, почему он находится в кеше для начала?Если вам не нужно часто изменять его, блокировка объекта не будет проблемой производительности.

...