Сообщение Re: "Этюд" от 11.10.2023 11:11
Изменено 11.10.2023 13:07 karbofos42
Re: "Этюд"
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ, Вы писали:
尿Ǥ푙>1. Как с минимальным шумом пофиксить
尿Ǥ푙>2. Как подтвердить некорректность работы простым тестом
Для этого нужно знать кто такой Key, что за GetFromDb и что закладывалось в эту наркоманию.
Если Key общий и в него пишут все подряд с разными id, то внезапно между вызовом Populate и обращением к Storage[Key] может влезть кто угодно (написанный lock от этого внезапно не защищает).
Нужен вообще этот Storage? А то и кэширования как-то не видно.
尿Ǥ푙>1. Как с минимальным шумом пофиксить
void Process(id)
{
var key = Cache.Populate(id);
}
...
static class Cache
{
private static readonly object _lock = new object();
public static Hashtable { get; set; } Storage = new Hashtable();
public static object Populate(int id)
{
lock(_lock )
{
var data = GetFromDb(id);
Storage[Key] = GetFromDb(id);
return data;
}
}
}
尿Ǥ푙>2. Как подтвердить некорректность работы простым тестом
Для этого нужно знать кто такой Key, что за GetFromDb и что закладывалось в эту наркоманию.
Если Key общий и в него пишут все подряд с разными id, то внезапно между вызовом Populate и обращением к Storage[Key] может влезть кто угодно (написанный lock от этого внезапно не защищает).
Нужен вообще этот Storage? А то и кэширования как-то не видно.
Re: "Этюд"
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ, Вы писали:
尿Ǥ푙>1. Как с минимальным шумом пофиксить
尿Ǥ푙>2. Как подтвердить некорректность работы простым тестом
Для этого нужно знать кто такой Key, что за GetFromDb и что закладывалось в эту наркоманию.
Если Key общий и в него пишут все подряд с разными id, то внезапно между вызовом Populate и обращением к Storage[Key] может влезть кто угодно (написанный lock от этого внезапно не защищает).
Нужен вообще этот Storage? А то и кэширования как-то не видно.
尿Ǥ푙>1. Как с минимальным шумом пофиксить
void Process(id)
{
var key = Cache.Populate(id);
}
...
static class Cache
{
private static readonly object _lock = new object();
public static Hashtable { get; set; } Storage = new Hashtable();
public static object Populate(int id)
{
lock(_lock )
{
var data = GetFromDb(id);
Storage[Key] = data;
return data;
}
}
}
尿Ǥ푙>2. Как подтвердить некорректность работы простым тестом
Для этого нужно знать кто такой Key, что за GetFromDb и что закладывалось в эту наркоманию.
Если Key общий и в него пишут все подряд с разными id, то внезапно между вызовом Populate и обращением к Storage[Key] может влезть кто угодно (написанный lock от этого внезапно не защищает).
Нужен вообще этот Storage? А то и кэширования как-то не видно.