Вход в C #: повышение производительности имени класса / метода

Недавно мне было поручено добавлять операторы журналирования для каждого вызова метода в решении. Эти записи журнала должны содержать класс и имя метода.

Я знаю Я могу использовать методы MethodBase.GetCurrentMethod () и StackFrame.GetMethod () . Что лучше? Есть ли лучший (или более производительный) способ получить имя класса и метода ?

7
задан Zachary Yates 25 August 2010 в 16:40
поделиться

3 ответа

У меня есть два предложения:

  1. Использовать готовые АОП-фреймворки (например, http://www.sharpcrafters.com/ ) они легко справятся с этим
  2. Выполните пользовательское действие перед сборкой, в котором вы замените какую-либо заглушку в начале каждого метода:

    void PerformSomeAction() { //PUT_LOGGING_HERE }

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

5
ответ дан 6 December 2019 в 22:59
поделиться

this.getType().toString() должен дать вам класс

О методе кажется, что stackFrame и methodbase являются наиболее очевидными решениями, я не могу комментировать, какое из них более эффективно.

1
ответ дан 6 December 2019 в 22:59
поделиться

Что ж, лучший/самый быстрый способ - включить строку в каждую функцию. Это может показаться не самым практичным решением, но MethodBase.GetCurrentMethod() требует кодирования внутри каждого метода, который его использует. т.е. вы можете написать

string funcName = "MyClass.MyFunction(int, int)";

или вы можете написать

string funcName = MethodBase.GetCurrentMethod().Name

Now, если вы хотите получить Имя функции, которая вызвала текущую функцию (т.е. вы хотите сделать это в одном месте в вашем функция ведения журнала), то единственным вариантом является чтение через StackFrame.

5
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: