internal static bool TryCreateCounters(IEnumerable <MailboxDatabase> databases, out Dictionary <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > counters) { if (databases == null) { throw new ArgumentNullException("databases"); } counters = null; Dictionary <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > dictionary = MailboxDatabaseCalculatedCounters.CreateCounters(databases); List <MailboxDatabase> list = new List <MailboxDatabase>(dictionary.Count); foreach (KeyValuePair <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > keyValuePair in dictionary) { Dictionary <string, float> dictionary2; if (!keyValuePair.Key.TryLoadStatistics(out dictionary2)) { list.Add(keyValuePair.Key); } else { foreach (MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue diagnosticMeasurementValue in keyValuePair.Value) { string[] array; Func <float[], float> func; if (MailboxDatabaseCalculatedCounters.CounterProperties.TryGetValue(diagnosticMeasurementValue.Measure.CounterName, out array) && MailboxDatabaseCalculatedCounters.CounterLogic.TryGetValue(diagnosticMeasurementValue.Measure.CounterName, out func)) { bool flag = true; float[] array2 = new float[array.Length]; for (int i = 0; i < array.Length; i++) { if (!dictionary2.TryGetValue(array[i], out array2[i])) { flag = false; break; } } if (!flag) { list.Add(keyValuePair.Key); break; } if (diagnosticMeasurementValue.Value == null) { diagnosticMeasurementValue.Value = new float?(0f); } MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue diagnosticMeasurementValue2 = diagnosticMeasurementValue; float?value = diagnosticMeasurementValue2.Value; float num = func(array2); diagnosticMeasurementValue2.Value = ((value != null) ? new float?(value.GetValueOrDefault() + num) : null); } } } } foreach (MailboxDatabase key in list) { dictionary.Remove(key); } bool flag2 = dictionary.Any <KeyValuePair <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > >(); if (flag2) { counters = dictionary; } return(flag2); }