WeakReference делает хороший кэш?

Я также использую cookie-parser, и верхние ответы приводят меня к решению. В моем случае мне нужно было также добавить overwrite: true, в противном случае был добавлен новый ключ cookie.

Итак, мое окончательное решение выглядит так:

res.cookie('cookieName', '', {
      domain: 'https://my.domain.com',
      maxAge: 0,
      overwrite: true,
    });
14
задан Rauhotz 30 May 2009 в 17:46
поделиться

3 ответа

Использование WeakReferences в качестве основного средства ссылки на кэшированные объекты - не самая лучшая идея, потому что, как сказал Джош, вы зависите от любых будущих поведенческих изменений WeakReference и GC.

Однако, если вашему кешу требуется какая-либо возможность восстановления, полезно использовать WeakReferences для элементов, ожидающих очистки. Когда элемент соответствует критериям исключения, вместо того, чтобы немедленно удалить его, вы меняете его ссылку на слабую ссылку. Если что-то запрашивает его перед сборкой мусора, вы восстанавливаете его сильную ссылку, и объект снова может жить. Я обнаружил, что это полезно для некоторых кешей, которые трудно предсказать, как часто бывает «воскрешение», чтобы быть полезным.

Если у вас есть предсказуемые шаблоны посещаемости,

15
ответ дан 1 December 2019 в 09:02
поделиться

Нет, WeakReference не подходит для этого, потому что поведение сборщика мусора может и будет меняться со временем, и ваш кеш не должен полагаться на сегодняшние поведение. Также многие факторы, не зависящие от вас, могут повлиять на нехватку памяти.

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

Еще одно замечание о том, почему ваши объекты собираются так часто. GC очень агрессивно очищает объекты Gen0. Если ваши объекты очень недолговечны (до тех пор, пока единственная ссылка на них не является слабой), тогда GC делает то, для чего он предназначен, очищая так быстро, как только может.

3
ответ дан 1 December 2019 в 09:02
поделиться

В .net WeakReference вообще не считается ссылкой с точки зрения GC, поэтому любой объект, который имеет только слабые ссылки, будет собран при следующем запуске GC (для соответствующего поколения) .

Это делает слабую ссылку совершенно непригодной для кэширования - как показывает ваш опыт.

Вам нужен «настоящий» компонент кеширования, и самое важное в кешировании - это получить такой, в котором политика выселения (то есть правила о том, когда удалять объект из кеша) хорошо подходят для вашего шаблона использования приложения.

5
ответ дан 1 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: