全局缓存的生成,一种模式是在由应用模型内来设置:
例如: if not GetGlobalCache(CacheName,V) then
Begin
V:=CalcDataCall();
SetGlobalCache(Cache,V);
End;
但这样存在几个问题:
一是全局缓存的设置是需要权限的,一旦采用这样的模式,代码只能运行在高权限下。
二是用户模型的性能是不稳定的,当第一次运行的时候会很缓慢,这样有时候会造成不可靠的用户体验。
三是我们很难知道何时适合于进行缓存的准备工作以及缓存的更新工作,因为缓存总有失效的时候,如果要解决失效问题,我们还得将代码变成如下:
if not GetGlobalCache(CacheName,V) or IsDataNeedReCalc(V) then
Begin
V:=CalcDataCall();
SetGlobalCache(Cache,V);
End
我们需要在IsDataNeedReCalc里来检查诸如外部数据的版本是否发生了变更等工作,往往这种检查对事件的耗费远远大于全局缓存的获取,这样又会影响到用户模型的效率。