現在、テンプレート化された電子メール(数千)を送信するバックグラウンドプロセスの一部としてRazorEnginev2.1を使用しています。処理を高速化するために、テンプレートはmd5の合計を名前としてコンパイルされます。これにより、テンプレートが変更されたときに再コンパイルされ、テンプレートを使用するすべての電子メールで同じコンパイル済みテンプレートを使用できるようになります。コンパイルされたテンプレートの名前をリストに記録して、いつコンパイルを再度呼び出すかを知ることができます(そして他のいくつかのことを行います)。
問題:非常に長い時間と多くのテンプレート変更の後、これらのキャッシュされたコンパイル済みテンプレートはすべて、に格納されているように見えるため、おそらくまだメモリに残っていることに気付きましたdynamic
。この特定のプロセスでは、再起動せずに一度に数か月実行される可能性がありますが、以前のバージョンのテンプレートがすべてまだ残っている場合、これは重大なメモリリークを構成する可能性があります。
質問:古いテンプレートのキャッシュを解除して、テンプレートがぶらぶらしないようにする方法はありdynamic
ますか?
たとえば、コンパイルされたテンプレートオブジェクトを自分で保持し、それらを使用したいときにRazorEngineに渡すことができた場合、それらをいつ破棄するかを決定でき、メモリリークがなくなります。ただし、RazorEngineがすでにこれを回避する方法を持っている場合は、インターネット上でこの特定の問題への参照をあまり見つけることができないため、それについて知ることも便利です。コンパイルされたテンプレートを使用してメモリ使用量を削減する必要がある理由についてはたくさんありますが、長寿命のアプリケーションに蓄積された大量の未使用のコンパイル済みテンプレートについて何かを見つけるのに苦労しました。
編集:キャッシングがどのように機能するか、そして同じ名前が別のテンプレートで渡された場合、それを再キャッシュして古いものを破棄することについて少し読んだところです。ただし、時間の経過とともに電子メールが追加および削除され、時間の経過とともにすべての古い削除された電子メールが引き続き存在するため(テンプレートの各バージョンのコピーは保存されませんが)、ここでの問題は依然として残ります。