using System; using System.Diagnostics; using System.Globalization; using Microsoft.Extensions.Logging; namespace MediaBrowser.Controller.Library { /// /// Class Profiler. /// public class Profiler : IDisposable { /// /// The name. /// readonly string _name; /// /// The stopwatch. /// readonly Stopwatch _stopwatch; /// /// The _logger. /// private readonly ILogger _logger; /// /// Initializes a new instance of the class. /// /// The name. /// The logger. public Profiler(string name, ILogger logger) { this._name = name; _logger = logger; _stopwatch = new Stopwatch(); _stopwatch.Start(); } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected virtual void Dispose(bool dispose) { if (dispose) { _stopwatch.Stop(); string message; if (_stopwatch.ElapsedMilliseconds > 300000) { message = string.Format( CultureInfo.InvariantCulture, "{0} took {1} minutes.", _name, ((float)_stopwatch.ElapsedMilliseconds / 60000).ToString("F", CultureInfo.InvariantCulture)); } else { message = string.Format( CultureInfo.InvariantCulture, "{0} took {1} seconds.", _name, ((float)_stopwatch.ElapsedMilliseconds / 1000).ToString("#0.000", CultureInfo.InvariantCulture)); } _logger.LogInformation(message); } } } }