Подтвердить что ты не робот

С# Время функции с использованием атрибута

Я хочу использовать функцию, используя атрибут. Я хотел бы сделать что-то вроде этого:

[TimeIt]
public MyFunc()
{
//do something
...
return;
}

после выполнения этой функции, если время, затраченное функцией, превышает пороговое значение, атрибут должен регистрировать время, используя log4net.

Это похоже на то, что делает MVC ActionFilterAttribute, за исключением того, что я не хочу использовать MVC.

4b9b3361

Ответ 1

Атрибуты (с некоторыми очень немногими исключениями, такими как [PrincipalPermission], которые определяются самой средой выполнения) метаданные только; так что не вызывает дополнительный магический вызов. Исключением является использование таких инструментов, как PostSharp, которые во время сборки обнаруживают такие атрибуты и переплетаются в дополнительном коде.

Во всех остальных случаях вам нужно будет проверить этот атрибут самостоятельно с помощью отражения и написать код для вызова дополнительных методов из атрибутов. Это то, что делает ASP.NET MVC; он идентифицирует ожидаемое семейство атрибутов и вызывает методы базового класса, чтобы заставить ваши фильтры срабатывать.

Если вы пишете плагин, это может иметь смысл. Если это для инструментального инструментария - это не будет работать, если вы не добавите дополнительный код самостоятельно.

Что может быть проще - написать тип IDisposable, который записывает истекшее время, когда оно расположено; то вы можете сделать:

using(new MyTimer("My label")) {
    //... Your method
}

Возможно, небольшое злоупотребление using, но оно должно работать.