internal static void IncrementIntervalCounter(string instanceName, CounterType counterType) { IntervalCounterInstance instance = IntervalCounterInstanceCache.GetInstance(instanceName); if (instance == null) { return; } instance.Increment(counterType); }
private static IntervalCounterInstance GetInstance(string instanceName) { try { IntervalCounterInstanceCache.readerWriterLock.AcquireReaderLock(5000); } catch (TimeoutException ex) { IntervalCounterInstanceCache.LogReaderWriterLockTimeoutEvent(ex, "IntervalCounterInstanceCache.GetInstance.AcquireReaderLock"); return(null); } IntervalCounterInstance intervalCounterInstance; try { IntervalCounterInstanceCache.instanceDictionary.TryGetValue(instanceName, out intervalCounterInstance); } finally { IntervalCounterInstanceCache.readerWriterLock.ReleaseReaderLock(); } if (intervalCounterInstance == null) { try { IntervalCounterInstanceCache.readerWriterLock.AcquireWriterLock(5000); } catch (TimeoutException ex2) { IntervalCounterInstanceCache.LogReaderWriterLockTimeoutEvent(ex2, "IntervalCounterInstanceCache.GetInstance.AcquireWriterLock"); return(null); } try { if (!IntervalCounterInstanceCache.instanceDictionary.TryGetValue(instanceName, out intervalCounterInstance)) { ExTraceGlobals.TenantMonitoringTracer.Information <string>(0L, "Create perf counter instance for {0}.", instanceName); intervalCounterInstance = new IntervalCounterInstance(); IntervalCounterInstanceCache.instanceDictionary[instanceName] = intervalCounterInstance; } } finally { IntervalCounterInstanceCache.readerWriterLock.ReleaseWriterLock(); } } return(intervalCounterInstance); }