Информация об изменениях

Сообщение Re: "Этюд" от 11.10.2023 11:11

Изменено 11.10.2023 13:07 karbofos42

Re: "Этюд"
Здравствуйте, 尿컙拋㕪⬎⤇Ǥ꧃푙刾ꄔ൒, Вы писали:

尿Ǥ푙>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. Как с минимальным шумом пофиксить


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? А то и кэширования как-то не видно.