You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.5 KiB
86 lines
2.5 KiB
#nullable disable
|
|
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.Globalization;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace MediaBrowser.Controller.Library
|
|
{
|
|
/// <summary>
|
|
/// Class Profiler.
|
|
/// </summary>
|
|
public class Profiler : IDisposable
|
|
{
|
|
/// <summary>
|
|
/// The name.
|
|
/// </summary>
|
|
readonly string _name;
|
|
|
|
/// <summary>
|
|
/// The stopwatch.
|
|
/// </summary>
|
|
readonly Stopwatch _stopwatch;
|
|
|
|
/// <summary>
|
|
/// The _logger.
|
|
/// </summary>
|
|
private readonly ILogger<Profiler> _logger;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="Profiler" /> class.
|
|
/// </summary>
|
|
/// <param name="name">The name.</param>
|
|
/// <param name="logger">The logger.</param>
|
|
public Profiler(string name, ILogger<Profiler> logger)
|
|
{
|
|
this._name = name;
|
|
|
|
_logger = logger;
|
|
|
|
_stopwatch = new Stopwatch();
|
|
_stopwatch.Start();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
|
/// </summary>
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Releases unmanaged and - optionally - managed resources.
|
|
/// </summary>
|
|
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|