Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Runtime.Caching / System / Caching / CacheMemoryMonitor.cs
index 8b32bedf742df80aaeba5119b2d5a6c05aba5524..0de026fa2520fed10151470a87d3f3d2ccfd86c5 100644 (file)
@@ -27,7 +27,7 @@ namespace System.Runtime.Caching {
         private long[] _cacheSizeSamples;
         private DateTime[] _cacheSizeSampleTimes;
         private int _idx;
-        private SRef _sizedRef;
+        private SRefMultiple _sizedRefMultiple;
         private int _gen2Count;
         private long _memoryLimit;
 
@@ -44,14 +44,15 @@ namespace System.Runtime.Caching {
             _gen2Count = GC.CollectionCount(2);
             _cacheSizeSamples = new long[SAMPLE_COUNT];
             _cacheSizeSampleTimes = new DateTime[SAMPLE_COUNT];
-            InitMemoryCacheManager();
+            if (memoryCache.UseMemoryCacheManager)
+                InitMemoryCacheManager();   // This magic thing connects us to ObjectCacheHost magically. :/
             InitDisposableMembers(cacheMemoryLimitMegabytes);
         }
         
         private void InitDisposableMembers(int cacheMemoryLimitMegabytes) {
             bool dispose = true;
             try {
-                _sizedRef = new SRef(_memoryCache);
+                _sizedRefMultiple = new SRefMultiple(_memoryCache.AllSRefTargets);
                 SetLimit(cacheMemoryLimitMegabytes);
                 InitHistory();
                 dispose = false;
@@ -112,8 +113,8 @@ namespace System.Runtime.Caching {
         }
 
         public void Dispose() {
-            SRef sref = _sizedRef;
-            if (sref != null && Interlocked.CompareExchange(ref _sizedRef, null, sref) == sref) {
+            SRefMultiple sref = _sizedRefMultiple;
+            if (sref != null && Interlocked.CompareExchange(ref _sizedRefMultiple, null, sref) == sref) {
                 sref.Dispose();
             }
             IMemoryCacheManager memoryCacheManager = s_memoryCacheManager;
@@ -139,7 +140,7 @@ namespace System.Runtime.Caching {
             // This update must happen, otherwise the CacheManager won't 
             // know the total cache size.
             int gen2Count = GC.CollectionCount(2);
-            SRef sref = _sizedRef;
+            SRefMultiple sref = _sizedRefMultiple;
             if (gen2Count != _gen2Count && sref != null) {
                 // update _gen2Count
                 _gen2Count = gen2Count;