osgEarth的Rex引擎原理分析(三十一)osgEarth::TerrainLayer中的_memCache(osgEarth::MemCache)详解

目标:(二十一)中的问题66

继承关系:

osgEarth::Cache

    osgEarth::MemCache

cache中的数据是通过cachebin来实现存放的,cachebin有两种,继承关系为:

osgEarth::CacheBin

     MemCacheBin

在osgEarth::Cache中有维护这osgEarth::CacheBin的map表,osgEarth::CacheBin其实就是最终的缓存数据,具体数据由其成员osg::ref_ptr<osg::Referenced> _metadata来存放。

osgEarth::MemCache中的CacheBin本质上是MemCacheBin,具体数据是在其MemCacheLRU _lru中存放,MemCacheLRU(typedef LRUCache<std::string, MemCacheEntry> MemCacheLRU)是一个osgEarth::LRUCache(Least-recently-used最近最少使用缓存类,很多操作系统中都有此中缓存类),值得注意的是LRUCache中既有map又有list,他们存放的数据是相同的,只所以要这样做,是因为map方便查找和存放,list方便定位较早的元素。

缓存的默认大小为16.

在osgDB::DatabasePager::DatabaseThread::run中处理请求时,会往图层的缓存中写入瓦片信息,在创建瓦片模型时会从缓存中读取缓存信息。

这个缓存和文件系统缓存还不一样,这里缓存在内存里,因而速度回更快。

猜你喜欢

转载自blog.csdn.net/hankern/article/details/84887142