Подсчет времени работы функции - C#
Формулировка задачи:
Нужно посчитать сколько времени отрабатывает различные функции. Хотел через таймер, но он мыслит тиками. Конечно можно отлавливать события сколько тиков прошло и их считать, но нет ли решения попроще.
p.s. А если нет решения можно готовый код по отлавливанию тиков.
Решение задачи: «Подсчет времени работы функции»
textual
Листинг программы
public partial class Form1 : Form { ... private void button1_Click(object sender, EventArgs e) { using ( var logger = new MethodLoggingTool( "Form1.button1_Click", new[] { new MethodParameterDescription("sender", sender) })) { label1.Text = ""; for (int i = 0; i < 10000; i++) { label1.Text += "."; } label1.Text = "done"; } } ... } ... public sealed class MethodLoggingTool : IDisposable { private static readonly CultureInfo _fp = CultureInfo.InvariantCulture; private readonly string _name; private readonly Guid _id; private readonly IGeneralLogger _logger; private readonly Stopwatch _sw; private readonly DateTime _processDate; private readonly int _processId; private MethodParameterDescription[] _argumentsOut; public MethodLoggingTool(string name, params MethodParameterDescription[] argumentsIn) { _name = name; _id = Guid.NewGuid(); _processDate = DateTime.Now; _processId = 0; _logger = Context.Resolve<IGeneralLogger>(); // получаем экземпляр логгера _logger.LogMethodEnter(_name, _id, _processDate, _processId, Format(argumentsIn)); _sw = new Stopwatch(); _sw.Start(); } public MethodLoggingTool(string name, DateTime processDate, int processId, params MethodParameterDescription[] argumentsIn) { _name = name; _id = Guid.NewGuid(); _processDate = processDate; _processId = processId; _logger = Context.Resolve<IGeneralLogger>(); // получаем экземпляр логгера _logger.LogMethodEnter(_name, _id, _processDate, _processId, Format(argumentsIn)); _sw = new Stopwatch(); _sw.Start(); } public string ValueNull { get { return "null"; } } public string ValueEmpty { get { return "empty"; } } public string Name { get { return _name; } } public Guid Id { get { return _id; } } public DateTime ProcessDate { get { return _processDate; } } public int ProcessId { get { return _processId; } } public IGeneralLogger Logger { get { return _logger; } } public Stopwatch Sw { get { return _sw; } } public IFormatProvider FormatProvider { get { return _fp; } } public void Dispose() { _sw.Stop(); _logger.LogMethodExit(_name, _id, _processDate, _processId, _sw.Elapsed, Format(_argumentsOut)); } public TaskLoggingTool GetThreadLoggingTool(int threadId) { return new TaskLoggingTool(this, threadId); } public void LogResult(params MethodParameterDescription[] argumentsOut) { _argumentsOut = argumentsOut; } private string Format(params MethodParameterDescription[] prm) { IList<MethodParameterDescription> lst = (prm ?? new MethodParameterDescription[0]).ToList(); if (lst.Any()) { var sb = new StringBuilder(); sb.Append("payload: "); int count = lst.Count, t0 = count - 1; for (int i = 0; i < count; i++) { sb.AppendFormat(_fp, "({0}) -> {1} = {2}", i + 1, lst[i].Name, lst[i].Value == null ? ValueNull : lst[i].Value); sb.Append(i < t0 ? "; " : "."); } return sb.ToString(); } return string.Empty; } } public class MethodParameterDescription { private readonly string _name; private readonly object _value; public MethodParameterDescription(string name, object value) { _name = name; _value = value; } public string Name { get { return _name; } } public object Value { get { return _value; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д