Beispiel #1
0
    public static TrackingPool <TResource> CreateAndAssignTrackingResourceStash <TKey, TResource>(
        this IChunkCacheBuilder <TKey, TResource> builder,
        long approximateCapacityInBytes,
        ChunkCacheBuilderOptions <TResource> options = null)
    {
        Contracts.Requires.That(builder != null);
        Contracts.Requires.That(approximateCapacityInBytes > 0);

        var poolOptions = new TrackingPoolOptions <TResource>();

        options = HandleOptions(poolOptions, options);
        poolOptions.BoundedCapacity = builder.CalculateResourcePoolCapacity(approximateCapacityInBytes);

        TrackingPool <TResource> pool;

        if (options.EagerFillPool)
        {
            pool = Pool.Tracking.New(poolOptions);
            pool.GiveUntilFull(builder.ResourceFactory);
        }
        else
        {
            pool = Pool.Tracking.WithFactory.Bounded.New(builder.ResourceFactory, poolOptions);
        }

        builder.ResourceStash = PoolStash.Create <TKey, TResource>(pool, options.StashCapacityMultiplier);
        return(pool);
    }
 public static void Build <TKey, TChunk, TReadOnlyChunk, TResource>(
     IChunkCacheBuilder <TKey, TChunk, TReadOnlyChunk, TResource> instance)
     where TChunk : TReadOnlyChunk
 {
     Contracts.Requires.That(instance != null);
     Contracts.Requires.That(instance.ResourceStash != null);
 }
Beispiel #3
0
    public static int CalculateResourcePoolCapacity <TKey, TResource>(
        this IChunkCacheBuilder <TKey, TResource> builder, long approximateCapacityInBytes)
    {
        Contracts.Requires.That(builder != null);
        Contracts.Requires.That(approximateCapacityInBytes > 0);

        long result = approximateCapacityInBytes / builder.ChunkConfig.ApproximateSizeInBytes;

        return((int)result.Clamp(1, int.MaxValue));
    }