Aspect dla ubogich / pomiar czasu wykonania metod C#

0

Nie musi to być prawdziwy rasowy aspekt, może jest jakiś trick z kodem:
określenie na produkcji czasu wykonania pewnej ilosci metod / geterów z właściwości (dotyczy własnego kodu, na który mamy wpływ)

Najlepiej jakby po znalezieniu problemu żeby bez dewastowania dało się od tego odejść.

0

Jak chcesz bieda aspekt to:

  1. fragment kodu który chesz zmierzyć zamieniasz na lambdę
  2. owijasz lambdę w StopWatcha
  3. wywołujesz lambdę w StopWatchu

Kodu w C# nie napiszę, bo nie umiem, ale mogę w Scali:

object WriteOnlyPL extends App {
  def stopWatch[A](lambda: () => A): A = {
    val t0 = System.nanoTime()
    val result = lambda()
    val t1 = System.nanoTime()
    println("Elapsed time: " + (t1 - t0) + "ns")
    result
  }
  
  stopWatch(() => 2+2)
}
  1. Oczywiscie czasy można logować w jakimś mądrzejszym miejscu niż STDOUT
  2. Oczywiście wiem, że Scala call-by-name, ale nie będę się znęcać nad C#
2

Próbowałeś interceptorów? Tutaj przykład z Autofaca https://autofac.readthedocs.io/en/latest/advanced/interceptors.html

Wpinasz je normalnie do kontenera DI jak potrzebujesz i usuwasz jak nie potrzebujesz.

public void Intercept(IInvocation invocation)
{
  // log method execution

  // start time execution
  var sp = new Stopwatch();
  sp.Start();
  
  invocation.Proceed(); // execute method

  sp.Stop();
  var elapsedTime = sp.Elapsed;

  // log elapsed time
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1