Вам нужен какой-то таймер для запуска процесса очистки через регулярные промежутки времени. Вы можете запускать по запросу, но это не рекомендуется, потому что вы, безусловно, не должны блокировать запросы в отношении того, что может быть длительным процессом очистки, и потому что у вас могут быть большие промежутки времени между запросами, что означает, что запросы могут обрабатывать данные, срок действия которых истек .
Один из вариантов - не делать процесс очистки не критичным, заставляя чтение фильтровать данные по истечении срока его службы. Например, вы можете использовать базу данных в памяти, такую как SQL Compact Edition или Sqlite. Кэшированные данные могут иметь столбец отметки времени, а затем считывать в кеш, могут запрашивать и всегда фильтровать по отметке времени не старше X. Что делает, это делает не критичным для очистки, но вместо этого оптимизация для давления памяти, которое действительно должно произойти. Sql просто дает вам простые механизмы для фильтрации по отметке времени. Вы можете сделать то же самое со своими собственными структурами данных в памяти.
Что касается процесса очистки, вам нужен какой-то таймер или что-то еще, чтобы запустить его. Процесс запуска WCF в сервисе proc также может запускать таймер и периодически вызывать кэш для очистки. Если вызов очистки вызывается во время очистки, он просто возвращается. Если вы делаете очистку не критичной (как описано выше), и процесс очистки игнорируется при выполнении, тогда каждый запрос также может ее ударить.