В настоящее время я использую RazorEngine v2.1 как часть фонового процесса, который отправляет шаблонные письма (тысячи из них). Чтобы ускорить процесс, шаблоны скомпилированы с их суммой md5 как имя. Это делает так, что при изменении шаблона он повторно компилируется, и все письма с использованием шаблона могут использовать один и тот же скомпилированный шаблон. Я отслеживаю имена скомпилированных шаблонов в списке, чтобы я знал, когда снова вызывать компиляцию (и делать несколько других вещей).
Проблема. Мне пришло в голову, что после очень долгого времени и после многих модификаций шаблонов все эти кэшированные скомпилированные шаблоны, вероятно, все еще будут в памяти, поскольку похоже, что они хранятся в dynamic
. Для этого конкретного процесса, который может работать в течение нескольких месяцев без перезагрузки, это может стать серьезной утечкой памяти, если все предыдущие версии шаблонов все еще висят вокруг.
Вопрос: есть ли способ откопать старые шаблоны, чтобы они больше не висели в dynamic
?
Если, например, мне удалось сохранить скомпилированные объекты шаблонов и просто передать их в RazorEngine, когда я захочу их использовать, я бы мог решить, когда их выбросить, и это устранит утечку памяти. Однако, если у RazorEngine уже есть способ обойти это, то знать об этом было бы удобно, так как я не могу найти очень много ссылок на эту конкретную проблему в Интернете. Есть много вещей, почему скомпилированные шаблоны должны использоваться для сокращения использования памяти, но мне было трудно найти что-нибудь о тоннах и тоннах неиспользуемых скомпилированных шаблонов, накапливаемых в долгоживущем приложении.
EDIT: я только что немного прочитал о том, как работает кеширование, и что если одно и то же имя передается с другим шаблоном, оно повторно кэширует его и отбрасывает старый. Проблема здесь все еще сохраняется, поскольку со временем электронные письма будут добавлены и удалены, и со временем все старые удаленные письма все равно будут (хотя и не будут хранить копии каждой версии шаблона).