Подсчет времени работы функции - C#

Узнай цену своей работы

Формулировка задачи:

Нужно посчитать сколько времени отрабатывает различные функции. Хотел через таймер, но он мыслит тиками. Конечно можно отлавливать события сколько тиков прошло и их считать, но нет ли решения попроще. p.s. А если нет решения можно готовый код по отлавливанию тиков.

Решение задачи: «Подсчет времени работы функции»

textual
Листинг программы
  1. public partial class Form1 : Form
  2. {
  3.     ...
  4.     private void button1_Click(object sender, EventArgs e)
  5.     {
  6.         using (
  7.             var logger = new MethodLoggingTool(
  8.                 "Form1.button1_Click",
  9.                 new[] { new MethodParameterDescription("sender", sender) }))
  10.         {
  11.             label1.Text = "";
  12.            
  13.             for (int i = 0; i < 10000; i++)
  14.             {
  15.                 label1.Text += ".";                    
  16.             }
  17.  
  18.             label1.Text = "done";
  19.         }
  20.     }
  21.     ...
  22. }
  23.  
  24. ...
  25.  
  26.  public sealed class MethodLoggingTool : IDisposable
  27.  {
  28.      private static readonly CultureInfo _fp = CultureInfo.InvariantCulture;
  29.      private readonly string _name;
  30.      private readonly Guid _id;
  31.      private readonly IGeneralLogger _logger;
  32.      private readonly Stopwatch _sw;
  33.      private readonly DateTime _processDate;
  34.      private readonly int _processId;
  35.      private MethodParameterDescription[] _argumentsOut;
  36.  
  37.      public MethodLoggingTool(string name, params MethodParameterDescription[] argumentsIn)
  38.      {
  39.          _name = name;
  40.          _id = Guid.NewGuid();
  41.          _processDate = DateTime.Now;
  42.          _processId = 0;
  43.  
  44.          _logger = Context.Resolve<IGeneralLogger>(); // получаем экземпляр логгера
  45.          _logger.LogMethodEnter(_name, _id, _processDate, _processId, Format(argumentsIn));
  46.  
  47.          _sw = new Stopwatch();
  48.          _sw.Start();
  49.      }
  50.  
  51.      public MethodLoggingTool(string name, DateTime processDate, int processId, params MethodParameterDescription[] argumentsIn)
  52.      {
  53.          _name = name;
  54.          _id = Guid.NewGuid();
  55.          _processDate = processDate;
  56.          _processId = processId;
  57.  
  58.          _logger = Context.Resolve<IGeneralLogger>(); // получаем экземпляр логгера
  59.          _logger.LogMethodEnter(_name, _id, _processDate, _processId, Format(argumentsIn));
  60.  
  61.          _sw = new Stopwatch();
  62.          _sw.Start();
  63.      }
  64.  
  65.      public string ValueNull
  66.      {
  67.          get { return "null"; }
  68.      }
  69.  
  70.      public string ValueEmpty
  71.      {
  72.          get { return "empty"; }
  73.      }
  74.  
  75.      public string Name
  76.      {
  77.          get { return _name; }
  78.      }
  79.  
  80.      public Guid Id
  81.      {
  82.          get { return _id; }
  83.      }
  84.  
  85.      public DateTime ProcessDate
  86.      {
  87.          get { return _processDate; }
  88.      }
  89.  
  90.      public int ProcessId
  91.      {
  92.          get { return _processId; }
  93.      }
  94.  
  95.      public IGeneralLogger Logger
  96.      {
  97.          get { return _logger; }
  98.      }
  99.  
  100.      public Stopwatch Sw
  101.      {
  102.          get { return _sw; }
  103.      }
  104.  
  105.      public IFormatProvider FormatProvider
  106.      {
  107.          get { return _fp; }
  108.      }
  109.  
  110.      public void Dispose()
  111.      {
  112.          _sw.Stop();
  113.          _logger.LogMethodExit(_name, _id, _processDate, _processId, _sw.Elapsed, Format(_argumentsOut));
  114.      }
  115.  
  116.      public TaskLoggingTool GetThreadLoggingTool(int threadId)
  117.      {
  118.          return new TaskLoggingTool(this, threadId);
  119.      }
  120.  
  121.      public void LogResult(params MethodParameterDescription[] argumentsOut)
  122.      {
  123.          _argumentsOut = argumentsOut;
  124.      }
  125.  
  126.      private string Format(params MethodParameterDescription[] prm)
  127.      {
  128.          IList<MethodParameterDescription> lst = (prm ?? new MethodParameterDescription[0]).ToList();
  129.          if (lst.Any())
  130.          {
  131.              var sb = new StringBuilder();
  132.              sb.Append("payload: ");
  133.  
  134.              int count = lst.Count, t0 = count - 1;
  135.  
  136.              for (int i = 0; i < count; i++)
  137.              {
  138.                  sb.AppendFormat(_fp, "({0}) -> {1} = {2}", i + 1, lst[i].Name, lst[i].Value == null ? ValueNull : lst[i].Value);
  139.                  sb.Append(i < t0 ? "; " : ".");
  140.              }
  141.  
  142.              return sb.ToString();
  143.          }
  144.  
  145.          return string.Empty;
  146.      }
  147.  }
  148.  
  149.  public class MethodParameterDescription
  150.  {
  151.      private readonly string _name;
  152.      private readonly object _value;
  153.  
  154.      public MethodParameterDescription(string name, object value)
  155.      {
  156.          _name = name;
  157.          _value = value;
  158.      }
  159.  
  160.      public string Name
  161.      {
  162.          get { return _name; }
  163.      }
  164.  
  165.      public object Value
  166.      {
  167.          get { return _value; }
  168.      }
  169.  }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы