PostSharp — исключение метода с использованием AttributeExclude не работает

У нас есть проект, в котором мы используем PostSharp для включения ведения журнала. Прекрасно работает. Тем не менее, есть несколько методов, которые выполняются в очень жестких циклах, где накладные расходы на ведение журнала действительно составляют значительную сумму. Я пытаюсь найти лучший способ исключить их из кода регистрации.

Из того, что я читал, этот подход должен работать

AssemblyInfo.cs

// turn on logging for all methods in all classes
[assembly: Log(LogType.Debug)]

Code.cs

// exclude this specific method
[Log(AttributeExclude=true)]
private void SomeMethod(...)

Однако, когда я делаю это и запускаю его с помощью профилировщика, я все равно вижу, что код журнала выполняется в SomeMethod(). Я пробовал много разных итераций этого, основываясь на сообщениях на форумах SO и PostSharp, и всегда получаю один и тот же результат.

Такое ощущение, что это должно быть очень просто, и я просто упускаю что-то явно очевидное.


person Jason    schedule 31.01.2011    source источник
comment
Предложенное вами решение должно работать. Вы смотрели SomeMethod с помощью Reflector, чтобы увидеть, что внутри кода?   -  person Gael Fraiteur    schedule 01.02.2011


Ответы (1)


Оказывается, в моей подпрограмме SomeMethod() был запрос LINQ, который компилятор превращал в отдельный метод. Этот сгенерированный компилятором метод также украшался PostSharp атрибутом Log. Глядя на это в профилировщике, было неясно, что происходит, но после использования Resharper для изучения сгенерированного кода я понял это.

person Jason    schedule 01.02.2011
comment
Вы использовали ReSharper или Reflector? - person Michael Freidgeim; 10.08.2013