internal static void AddResourceData( ProtocolDiagnosticResourceEvent pdEvent, IReadOnlyDictionary <string, Data> allData, ConcurrentDictionary <string, ConcurrentDictionary <string, string> > resourceStringTable) { if (!allData.TryGetValue(pdEvent.Source, out Data data)) { return; } var resourceMethodNameTable = resourceStringTable.GetOrAdd(pdEvent.ResourceType, t => new ConcurrentDictionary <string, string>()); var resourceTypeAndMethod = resourceMethodNameTable.GetOrAdd(pdEvent.Method, m => pdEvent.ResourceType + "." + m); lock (data._lock) { if (data.Resources.TryGetValue(resourceTypeAndMethod, out var t)) { data.Resources[resourceTypeAndMethod] = (t.count + 1, t.duration + pdEvent.Duration); } else { data.Resources[resourceTypeAndMethod] = (1, pdEvent.Duration); } } }
private void ProtocolDiagnostics_ResourceEvent(ProtocolDiagnosticResourceEvent pdEvent) { AddResourceData(pdEvent, _data, _resourceStringTable); }
internal static void RaiseEvent(ProtocolDiagnosticResourceEvent pdrEvent) { ResourceEvent?.Invoke(pdrEvent); }