/// <summary> /// Registers an internal url converter. /// </summary> /// <param name="urlConverter"></param> public static void Register(IInternalUrlConverter urlConverter) { _converters.Add(urlConverter); }
private static void MeasureConvertionPerformance(Dictionary <string, Measurement> measurements, IInternalUrlConverter converter, Action action) { string key = converter.GetType().FullName; var stopwatch = new Stopwatch(); long memoryBefore = GC.GetTotalMemory(false); stopwatch.Start(); action(); stopwatch.Stop(); long memoryTotal = GC.GetTotalMemory(false) - memoryBefore; long totalTime = (stopwatch.ElapsedTicks * 1000000) / Stopwatch.Frequency; if (memoryTotal < 0) { memoryTotal = 0; } Measurement existingRecord; if (measurements.TryGetValue(key, out existingRecord)) { existingRecord.MemoryUsage += memoryTotal; existingRecord.TotalTime += totalTime; // NOTE: Loosing some of the precision here } else { measurements.Add(key, new Measurement(key) { MemoryUsage = memoryTotal, TotalTime = totalTime }); } }