Я начинаю работать с атрибутами, и для этого примера код написан с использованием PostSharp 2.0.
То, что я хотел бы сделать, - это метод с атрибутом Stopwatch
, или вызывающий метод может получить доступ к прошедшему времени.
В настоящее время я пишу эти коды, используя C # 4.0
Пример кода атрибута:
[Serializable]
public class StopwatchAttribute : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{
// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();
// Begin timing
stopwatch.Start();
args.MethodExecutionTag = stopwatch;
}
public override void OnExit(MethodExecutionArgs args)
{
Stopwatch stopwatch = (Stopwatch)args.MethodExecutionTag;
// Stop timing
stopwatch.Stop();
// Write result
Debug.WriteLine("Time elapsed: {0} ms", stopwatch.Elapsed);
}
}
Использование атрибута
[Stopwatch]
public string Search(string LineNo)
{
// Search for something
// Is it possible to know how long (from Stopwatch attribute) Search took
}
public void CallSearch
{
string x = Search("xyz");
// Is it possible to know how long (from Stopwatch attribute) Search took
}
Я получаю вывод прошедшего времени.
Однако есть ли возможность расширить это, чтобы я мог отправить истекшее время ожидания.
В идеале я хотел бы посмотреть, сколько времени Search
взято из CallSearch
, но все будет хорошо, если я смогу даже получить результат в Search
и затем каким-то образом вернуть его.
В качестве обходного пути я в настоящее время использую "Отверстие в середине" шаблон.
Спасибо