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; } }