public DiskChunkCache(IFileCollection fileCollection, int keySize, long cacheCapacity)
{
if (keySize != 20) throw new NotSupportedException("Only keySize of 20 (Usefull for SHA1) is supported for now");
if (cacheCapacity < 1000) throw new ArgumentOutOfRangeException(nameof(cacheCapacity), "Minimum for cache capacity is 1kB");
_fileCollection = fileCollection;
_keySize = keySize;
_cacheCapacity = cacheCapacity;
cacheCapacity = cacheCapacity / 1000 * (980 - keySize); // decrease for size of HashIndex
if (cacheCapacity / 8 > int.MaxValue)
{
_maxValueFileCount = checked((int)(cacheCapacity / int.MaxValue));
_sizeLimitOfOneValueFile = int.MaxValue;
}
else
{
_maxValueFileCount = 8;
_sizeLimitOfOneValueFile = (int)(cacheCapacity / 8);
}
try
{
LoadContent();
}
catch
{
_cache.Clear();
}
if (_cache.Count == 0)
{
foreach (var collectionFile in _fileInfos.Keys)
{
_fileCollection.GetFile(collectionFile).Remove();
}
_fileInfos.Clear();
_fileGeneration = 0;
}
}