Inheritance: IPerformanceCountersProvider
Exemple #1
0
        private IPerformanceCountersProvider GetPerformanceCounterProviderForCurrentTransaction()
        {
            var transaction = Transaction.Current;

            if (transaction == null)
            {
                return(ImmediatelyRecordingProvider);
            }

            IPerformanceCountersProvider provider;

            if (transactionalProviders.TryGetValue(transaction, out provider))
            {
                return(provider);
            }

            lock (transactionalProviders)
            {
                if (transactionalProviders.TryGetValue(transaction, out provider))
                {
                    return(provider);
                }

                provider = new TransactionalPerformanceCountersProvider(transaction, ImmediatelyRecordingProvider);

                transactionalProviders.Add(transaction, provider);
                transaction.TransactionCompleted += (s, e) =>
                {
                    lock (transactionalProviders)
                    {
                        transactionalProviders.Remove(e.Transaction);
                    }
                };

                return(provider);
            }
        }
        private IPerformanceCountersProvider GetPerformanceCounterProviderForCurrentTransaction()
        {
            var transaction = Transaction.Current;

            if(transaction == null)
                return ImmediatelyRecordingProvider;

            IPerformanceCountersProvider provider;
            if (transactionalProviders.TryGetValue(transaction, out provider))
                return provider;

            lock (transactionalProviders)
            {
                if (transactionalProviders.TryGetValue(transaction, out provider))
                    return provider;

                provider = new TransactionalPerformanceCountersProvider(transaction, ImmediatelyRecordingProvider);

                transactionalProviders.Add(transaction, provider);
                transaction.TransactionCompleted += (s, e) =>
                    {
                        lock (transactionalProviders)
                        {
                            transactionalProviders.Remove(e.Transaction);
                        }
                    };

                return provider;
            }
        }