Ejemplo n.º 1
0
        internal ConsensusRulesPerformanceSnapshot(IEnumerable <RuleItem> rulesToTrack)
        {
            this.PerformanceInfo = new Dictionary <IConsensusRuleBase, RulePerformance>();

            foreach (RuleItem rule in rulesToTrack)
            {
                var perf = new RulePerformance(rule);
                this.PerformanceInfo.Add(rule.RuleReferenceInstance, perf);
            }
        }
        /// <summary>Measures the rule execution time and adds this sample to performance counter.</summary>
        /// <param name="rule">Rule being measured.</param>
        /// <returns><see cref="IDisposable"/> that should be disposed after rule has finished it's execution.</returns>
        public IDisposable MeasureRuleExecutionTime(IConsensusRuleBase rule)
        {
            var stopwatch = new StopwatchDisposable(elapsedTicks =>
            {
                RulePerformance performance = this.currentSnapshot.PerformanceInfo[rule];

                Interlocked.Increment(ref performance.CalledTimes);
                Interlocked.Add(ref performance.ExecutionTimesTicks, elapsedTicks);
            });

            return(stopwatch);
        }