我想通过WCF数据服务(Singlton)公开一些端点,它将维护用于响应各个请求的数据集合。
理想情况下,我希望能够在一段时间后过期(删除)内存中为给定请求保留的数据。
存储的数据将用于构建(仅部分,因此开箱即用的缓存不正常)结果集返回到客户端。数据将来自API,必须保存在内存中,而不是存储。
我正在寻找触发“清除”过程以检查过期数据的方法。在ctor中启动计时器似乎是一个坏主意。它可以针对每个请求运行(启用单一并发)但这似乎过多,并且当没有更多请求时可能会使数据停滞不前?
对此问题的任何想法都表示赞赏。
答案 0 :(得分:0)
您需要某种计时器来定期运行清理过程。您可以根据请求触发,但这不可取,因为您当然不应阻止对长时间运行的清理过程的请求,并且因为您可能在请求之间有很长一段时间意味着请求可能会处理超出其生命周期的数据
一种选择是不要通过使读取过滤数据超出其生命周期来使清理过程不重要。例如,您可以使用内存数据库,如SQL Compact Edition或Sqlite。缓存的数据可以在其上有一个时间戳列,然后读入缓存可以查询并始终按不超过X的时间戳进行筛选。这样做是因为它使不重要进行清理但是而是真正应该发生的内存压力优化。 Sql只是为您提供了按时间戳过滤的简单机制。您可以使用自己的内存数据结构执行相同的操作。
就清理过程而言,您需要某种计时器或其他东西来启动它。在proc服务中启动WCF的过程也可以启动计时器并在定期基础上调用缓存来清理它。如果在清理时调用清理调用,它就会返回。如果你进行清理并不重要(如上所述)并且如果运行则忽略清理过程,那么每个请求都可能会启动它。
答案 1 :(得分:0)
在Windows服务中重新设计和托管相关服务组件,并使用系统计时器清除所需数据。