Я думаю, вы должны попробовать способ PostSharp http://www.postsharp.org/
Изменение кода в образце для этого:
public class ProfileMethodsAttribute : OnMethodBoundaryAspect
{
public override void OnEntry( MethodExecutionEventArgs eventArgs)
{ eventArgs.MethodExecutionTag = Stopwatch.StartNew(); }
public override void OnExit( MethodExecutionEventArgs eventArgs)
{
// Here u can get the time
Console.WriteLine(((Stopwatch)eventArgs.MethodExecutionTag).ElapsedMilliseconds);
}
}
Вы можете получить свободное время любым способом