public SimpleReadCachingBlockStore(IBlockStore store, uint cacheCapacity = 512) { if (store == null) { throw new ArgumentNullException("store"); } _store = store; _blockCache = new SimpleRecentItemCache<byte[]>(); _blockCache.CacheCapacity = cacheCapacity; _blockCache.ItemRemovedFromCache = ItemRemovedFromCache; _blockCache.OnCacheMiss = CacheMiss; _blockBuffPool = new ObjectPool<byte[]>(() => new byte[store.BlockSize]); }
public SimpleReadWriteCachingBlockStore(IBlockStore store, uint capacity = 512) { if (store == null) { throw new ArgumentNullException("store"); } _store = store; _blockSize = _store.BlockSize; _itemPool = new ObjectPool<CacheItem>(() => new CacheItem(_blockSize)); _blockCache = new SimpleRecentItemCache<CacheItem>(); _blockCache.CacheCapacity = capacity; _blockCache.ItemRemovedFromCache = ItemRemovedFromCache; _blockCache.OnCacheMiss = CacheMiss; }
public SmarterReadCachingBlockStore(IBlockStore backend, uint cacheBlockSize, uint cacheCapacity = SimpleRecentItemCache<byte[]>.DefaultCacheSize) { if (backend == null) { throw new ArgumentNullException("backend"); } _backend = backend; _cacheBlockSize = cacheBlockSize; if (cacheBlockSize % _backend.BlockSize != 0) { throw new Exception("Wrong CacheBlockSize value. Should be perfect multiple of backend block size"); } _backendBlocksPerCacheBlock=cacheBlockSize/_backend.BlockSize; _bufferPool = new ObjectPool<byte[]>(() => new byte[cacheBlockSize]); _cache = new SimpleRecentItemCache<byte[]>(cacheCapacity); _cache.ItemRemovedFromCache = ItemRemovedFromCache; _cache.OnCacheMiss = CacheMiss; }