Exemplo n.º 1
0
        internal static void IncrementIntervalCounter(string instanceName, CounterType counterType)
        {
            IntervalCounterInstance instance = IntervalCounterInstanceCache.GetInstance(instanceName);

            if (instance == null)
            {
                return;
            }
            instance.Increment(counterType);
        }
Exemplo n.º 2
0
        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);
        }