пишет 1 по правилам:
1. каждые два часа обновляются значения по ключу (все)
2. есть вероятность добавления новых, но в пределах указанной при создании словаря capacity (если начальный размер 5-6кк, кол-во новых за сутки не больше 100к, раз в день приложение перезапускается и capacity обновляется)
3. при обновлении не обязательно, чтобы по ключу гарантированно следующим чтением достали новое значение.
Нужно ли для этого применять Concurent версию, или можно и обычным словарем обойтись?
Если ты на 100% гарантируешь что писать будет только один поток, можно обычным
Спасибо 100%, это монитор, который обновляет конкретно этот кэш. все остальные только читают. если вдруг при добавлении выскочим за исходную capacity? я делаю так, тяну данные с БД, rowCount * 1.3 это исходная capacity. то есть запас +-2 миллиона. переделаю, наверное, на rowCount + 1_000_000 еще видел с сорсах, там для ключей-строк применятся Resize c forceNewHashCodes, который полностью коллекцию пересоздает у меня ключи это два шорта + строка над хэшом не особо долго думал (short < 16) ^ (short < 8) ^ string.GetHashCode() мурмур3 или fastHash какой-нибудь стоит ли добавлять?
1. Если произойдет ресайз при добавлении, скорее всего все читатели в этот момент упадут, тогда лучше поставь Concurrent 2. Советую сначала замерить, стоит заменять хеш только если бенчмарк покажет прирост в производительности
Обсуждают сегодня