缓存

ICU的内存大小很重要。这和性能都与我们的缓存方式密切相关。我们肯定有机会通过更好的缓存来提高大小和性能。现在我们不缓存应该缓存的内容,也不在内容足够旧或未使用时将其从缓存中转储出来。因为我们对不同的对象有单独的缓存,所以在不再需要时,我们也没有一个好的整体删除策略。

以下是关于如何做得更好的一些想法。这至少在一定程度上涉及到使缓存工作更容易,这样程序员就不必“做正确的事情”了。

低级别缓存

在低级别上,我们有一个全局缓存。要从缓存中获取内容,需要提供服务密钥、特定密钥和函子。functor特定于服务,并且知道如何创建缓存中不可用的请求对象。缓存还提供对服务密钥的迭代,并在其中对特定密钥进行迭代。公共方法还可以部分或完全刷新缓存(以满足某些最大大小目标或其他条件)。当然,缓存是线程安全的。我们还提供低级钩子,以便人们可以用自己的缓存机制替换缓存机制。

高级对象

在更高的级别上,我们使用低级缓存创建类(通过子类化),使服务的语法更容易。每个这样的类都知道一种对象类型,以及如何创建,因此它将提供全局缓存所需的函子。这些类可能提供一些语义糖来涵盖常见情况:

    • 不可变对象

    • 服务内部的可变对象

    • 服务将克隆并允许访问的可变对象(例如通过getInstance())

其中一些与当前的注册机制重叠,因此我们应该同时考虑这些机制;虽然注册的目标有些不同,但我们可能能够共享一些代码。