/// <summary> /// Relolves cache versions using persistent storage /// </summary> /// <param name="name">Name of the cache (region)</param> /// <param name="infoProvider"> </param> public VersionHelper(string name, ICacheInfoProvider infoProvider) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentException(nameof(name) + " should not be null or empty"); } if (infoProvider == null) { throw new ArgumentException(nameof(infoProvider) + " should not be null"); } var config = ConfigurationManager.GetSection("cacheSettings") as NameValueCollection ?? new NameValueCollection(); if (!Enum.TryParse(config["VersionPolicy"], out _retrievalPolicy)) { _retrievalPolicy = VersionPolicy.Once; //NOTE: default to Once like in running job in a thread } if (_retrievalPolicy == VersionPolicy.Timeout) { _timeout = TimeSpan.FromSeconds(Convert.ToInt32(config["VersionTimeout"])); } _cacheName = name; _infoProvider = infoProvider; }
private static ICacheInfoProvider GetCacheInfoProvider(bool isCommonDb = false) { ICacheInfoProvider result = null; try { result = IoContainer.ResolveWithParamsOverride <ICacheInfoProvider>(new ParameterOverride(nameof(isCommonDb), isCommonDb)); } catch (Exception ex) { Log.Error(ex, "Error resolving ICacheInfoProvider"); } return(result); }
public MemoizingCache(string name, int capacity, TimeSpan timeout, ICacheVersionHelper <int> versionResolver = null, ICacheInfoProvider contextProvider = null) { if (capacity <= 0) { throw new ArgumentException($"{nameof(capacity)} should be positive integer."); } _capacity = capacity; _timeout = timeout; VersionResolver = versionResolver; _contextProvider = contextProvider; _caches = new Dictionary <int, ICache <int> >(); try { var instanceName = $"{Environment.UserName} - {name}"; _pcHits = new PerformanceCounter(Constants.PERF_CATEGORY_CACHE, Constants.PERF_COUNTER_HITS, instanceName, false) { RawValue = 0 }; _pcMisses = new PerformanceCounter(Constants.PERF_CATEGORY_CACHE, Constants.PERF_COUNTER_MISSES, instanceName, false) { RawValue = 0 }; _pcRequests = new PerformanceCounter(Constants.PERF_CATEGORY_CACHE, Constants.PERF_COUNTER_REQUESTS, instanceName, false) { RawValue = 0 }; _pcHits.NextSample(); _pcMisses.NextSample(); _pcRequests.NextSample(); } catch { _usePerfCounters = false; //NOTE: can't initialize perf counters, so won't use them } }