Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Блокировка кэша / 12 сообщений из 12, страница 1 из 1
09.08.2012, 08:09
    #37909864
artemius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
Здравствуйте всем,

в приложении используются объекты из кэша. Один объект используется несколькими пользователями. Если объекта в кэше нет, он сначала создается, потом кладется в кэш. При одновременном обращении пользователей возможна ситуация, когда в кэш кладутся несколько одних и тех же объектов, что не есть хорошо. Как можно заблокировать кэш, чтобы в него помещался только один объект от первого обращения к приложению? Можно ли использовать конструкцию вида

lock(Cache)
{
..
}

Спасибо!
...
Рейтинг: 0 / 0
09.08.2012, 09:45
    #37909975
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
Есть штатная блокировка Application без написания левого кода .

Код: c#
1.
2.
3.
Application.Lock(); 
Application["MyCode"] = ...; 
Application.UnLock(); 



А, вообще, за такую "архитектуру" по блокировке Application / Cache нужно веником по мягкому месту рядить.
...
Рейтинг: 0 / 0
09.08.2012, 10:50
    #37910120
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
МСУЕсть штатная блокировка Application без написания левого кода .

Код: c#
1.
2.
3.
Application.Lock(); 
Application["MyCode"] = ...; 
Application.UnLock(); 




А, вообще, за такую "архитектуру" по блокировке Application / Cache нужно веником по мягкому месту рядить.

за такую точно =))

2ТС:
lock подойдёт, только нужно его правильно заиспользовать
...
Рейтинг: 0 / 0
09.08.2012, 10:55
    #37910132
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
pationза такую точно =))
А за какую не точно? )
...
Рейтинг: 0 / 0
09.08.2012, 11:04
    #37910157
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
МСУpationза такую точно =))
А за какую не точно? )

Велосипедов изобретена тьма

но Application.Lock() - это жесть
...
Рейтинг: 0 / 0
09.08.2012, 11:07
    #37910165
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
pationВелосипедов изобретена тьма
но Application.Lock() - это жесть
Поверь, эти велосипеды не меньшая жесть.
...
Рейтинг: 0 / 0
09.08.2012, 11:11
    #37910175
artemius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
есть т.н. паттерн "Двойная блокировка", что вы скажете про него?

private static object ThisLock = new object();
...
object dataObject = Cache["globalData"];
if( dataObject == null )
{
lock( ThisLock )
{
dataObject = Cache["globalData"];

if( dataObject == null )
{
//Get Data from db
dataObject = GlobalObj.GetData();
Cache["globalData"] = dataObject;
}
}
}
return dataObject;
...
Рейтинг: 0 / 0
09.08.2012, 11:54
    #37910286
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
artemius, это не двойная блокировка, это гумно на постном масле. Для double checked locking нужно использовать volatile.
Вот пример .
...
Рейтинг: 0 / 0
09.08.2012, 12:01
    #37910312
artemius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
МСУartemius, это не двойная блокировка, это гумно на постном масле.

а в чем недостатки этого способа?
...
Рейтинг: 0 / 0
09.08.2012, 12:04
    #37910323
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
artemiusа в чем недостатки этого способа?
Прочитай внимательно ссылку.
...
Рейтинг: 0 / 0
09.08.2012, 12:30
    #37910383
Deza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
artemiusЗдравствуйте всем,

в приложении используются объекты из кэша. Один объект используется несколькими пользователями. Если объекта в кэше нет, он сначала создается, потом кладется в кэш. При одновременном обращении пользователей возможна ситуация, когда в кэш кладутся несколько одних и тех же объектов, что не есть хорошо. Как можно заблокировать кэш, чтобы в него помещался только один объект от первого обращения к приложению? Можно ли использовать конструкцию вида

lock(Cache)
{
..
}

Спасибо!

на один key

"когда в кэш кладутся несколько одних и тех же объектов" это как?
...
Рейтинг: 0 / 0
30.08.2012, 16:14
    #37937416
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка кэша
Вообщем, пришел к выводу, что асп.нетовский кеш не получится полноценно залочить. Не поможет даже двойная блокировка.
Вывод простой - обычный потокобезопасный статический синглтон спасет отца русской демократии. Но про кешёвые фишки типа таймера, коллбэков и иже с ними придется забыть. Ну или пытаться всё это засунуть в синглтон со всеми вытекающими.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Блокировка кэша / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]