Пример #1
0
        /// <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;
        }
Пример #2
0
        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
            }
        }