Являются ли значения ASP.NET Cache одинаковыми или более узкими, чем статическая переменная? - PullRequest
0 голосов
/ 23 февраля 2010

Для синхронизации доступа к объекту Dictionary в кэше ASP.NET рекомендуется использовать объект синхронизатора.

Dino Esposito рекомендует статическую переменную в качестве цели для блокировки (см. http://www.drdobbs.com/cpp/184406369). Однако это будет работать только в том случае, если значения ASP.NET Cache имеют ту же область (или более узкую область), что и статические переменные.

Кто-нибудь знает документацию на этот счет?

Ответы [ 2 ]

1 голос
/ 23 февраля 2010

// Обновление на основе комментария Кэш уникален для каждого домена приложения, поэтому вам не нужно беспокоиться. См. MSDN здесь

Существует один экземпляр кэша класс для домена приложения. Как результат, объект Cache, который возвращаемое свойство Cache является Объект кэширования для всех запросов в домен приложения.

// Оригинальный ответ

Я не уверен, что понимаю ваш вопрос. Все в кэше доступно глобально (или, по крайней мере, доступно любому, у кого есть доступ к объекту кэша).

Этот код будет безопасным, если он является единственным местом, к которому вы получаете доступ к объекту.

    private static readonly object lockme = new object();
    public void SetDictionaryValue(string key, string value)
    {
        lock (lockme)
        {
            var lookup = (Dictionary<string, string>)GetFromCache("LookupDictionary");
            lookup["key"] = value;
        }
    }

    public string GetDictionaryValue(string key)
    {
        lock (lockme)
        {
            var lookup = (Dictionary<string, string>)GetFromCache("LookupDictionary");
            return lookup["key"];
        }
    }

Но да, безопасность не гарантируется, поскольку может существовать другой код, который извлекает словарь из кэша где-то еще и модифицирует его. Не уверен, как ты мог гарантировать, что этого не произойдет. Я имею в виду, что вы можете использовать GUID в качестве ключа, но вы все равно можете перебирать все переменные кэша.

Я не уверен, что помогу вам здесь?

0 голосов
/ 23 февраля 2010

Почему вы не блокируете объекты словаря? Тогда ваш замок будет еще более мелкозернистым. Хотя я согласен с Эндрю, что блокировка статического объекта - это нормально.

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