Подсчет времени работы функции - 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; }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д