Exemplo n.º 1
0
        internal void Dispose()
        {
            SRefMultiple sref = _sizedRef;

            if (sref != null && Interlocked.CompareExchange(ref _sizedRef, null, sref) == sref)
            {
                sref.Dispose();
            }
        }
Exemplo n.º 2
0
        int GetCurrentPressure()
        {
            // Call GetUpdatedTotalCacheSize to update the total
            // cache size, if there has been a recent Gen 2 Collection.
            // This update must happen, otherwise the CacheManager won't
            // know the total cache size.
            int          gen2Count = GC.CollectionCount(2);
            SRefMultiple sref      = _sizedRef;

            if (gen2Count != _gen2Count && sref != null)
            {
                // update _gen2Count
                _gen2Count = gen2Count;

                // the SizedRef is only updated after a Gen2 Collection

                // increment the index (it's either 1 or 0)
                Debug.Assert(SAMPLE_COUNT == 2);
                _idx = _idx ^ 1;
                // remember the sample time
                _cacheSizeSampleTimes[_idx] = DateTime.UtcNow;
                // remember the sample value
                _cacheSizeSamples[_idx] = sref.ApproximateSize;
#if DBG
                Debug.Trace("CacheMemory", "SizedRef.ApproximateSize=" + _cacheSizeSamples[_idx]);
#endif
            }

            // if there's no memory limit, then there's nothing more to do
            if (_memoryLimit <= 0)
            {
                return(0);
            }

            long cacheSize = _cacheSizeSamples[_idx];

            // use _memoryLimit as an upper bound so that pressure is a percentage (between 0 and 100, inclusive).
            if (cacheSize > _memoryLimit)
            {
                cacheSize = _memoryLimit;
            }

            // PerfCounter: Cache Percentage Process Memory Limit Used
            //    = memory used by this process / process memory limit at pressureHigh
            // Set private bytes used in kilobytes because the counter is a DWORD

            // BUGBUG: need to update description for this counter, or deprecate and introduce a new one for this usage
            PerfCounters.SetCounter(AppPerfCounter.CACHE_PERCENT_PROC_MEM_LIMIT_USED, (int)(cacheSize >> KILOBYTE_SHIFT));

            int result = (int)(cacheSize * 100 / _memoryLimit);
            return(result);
        }
Exemplo n.º 3
0
        internal CacheSizeMonitor(SRefMultiple sizedRef)
        {
            _sizedRef             = sizedRef;
            _gen2Count            = GC.CollectionCount(2);
            _cacheSizeSamples     = new long[SAMPLE_COUNT];
            _cacheSizeSampleTimes = new DateTime[SAMPLE_COUNT];

            _pressureHigh   = 99;
            _pressureMiddle = 98;
            _pressureLow    = 97;

            InitHistory();
        }
        internal CacheMemorySizePressure(SRefMultiple sizedRef)
        {
            _sizedRef             = sizedRef;
            _gen2Count            = GC.CollectionCount(2);
            _cacheSizeSamples     = new long[SAMPLE_COUNT];
            _cacheSizeSampleTimes = new DateTime[SAMPLE_COUNT];

            _pressureHigh   = 99;
            _pressureMiddle = 98;
            _pressureLow    = 97;

            _startupTime = DateTime.UtcNow;

            InitHistory();
        }
        internal void Dispose()
        {
            SRefMultiple sref = _sizedRef;

            if (sref != null && Interlocked.CompareExchange(ref _sizedRef, null, sref) == sref)
            {
                sref.Dispose();
            }
            ApplicationManager appManager = HostingEnvironment.GetApplicationManager();

            if (appManager != null)
            {
                long sizeUpdate = (0 - _cacheSizeSamples[_idx]);
                appManager.GetUpdatedTotalCacheSize(sizeUpdate);
            }
        }
Exemplo n.º 6
0
 internal CacheCommon() {
     _cachePublic = new Cache(0);
     _srefMultiple = new SRefMultiple();
     _cacheMemoryStats = new CacheMemoryStats(_srefMultiple);
     _enableMemoryCollection = true;
     _enableExpiration = true;
 }
 internal CacheMemoryStats(SRefMultiple sizedRef)
 {
     _pressureTotalMemory = new CacheMemoryTotalMemoryPressure();
     _pressureCacheSize   = new CacheMemorySizePressure(sizedRef);
 }
Exemplo n.º 8
0
 internal CacheMemoryStats(SRefMultiple sizedRef) {
     _pressureTotalMemory = new CacheMemoryTotalMemoryPressure();
     _pressureCacheSize = new CacheMemorySizePressure(sizedRef);
 }
Exemplo n.º 9
0
        internal CacheMemorySizePressure(SRefMultiple sizedRef) {
            _sizedRef = sizedRef;
            _gen2Count = GC.CollectionCount(2);
            _cacheSizeSamples = new long[SAMPLE_COUNT];
            _cacheSizeSampleTimes = new DateTime[SAMPLE_COUNT];

            _pressureHigh = 99;
            _pressureMiddle = 98;
            _pressureLow = 97;

            _startupTime = DateTime.UtcNow;

            InitHistory();
        }