1. 程式人生 > >osgEarth的Rex引擎原理分析(三十一)osgEarth::TerrainLayer中的_memCache(osgEarth::MemCache)詳解

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中處理請求時,會往圖層的快取中寫入瓦片資訊,在建立瓦片模型時會從快取中讀取快取資訊。

這個快取和檔案系統快取還不一樣,這裡快取在記憶體裡,因而速度回更快。