В java, как быстро комментировать несколько строк кода?
Я хочу проверить время работы определенного блока кода следующим образом:
start = System.currentTimeMillis();
{
...
this.dosomething();
}
end = System.currentTimeMillis();
System.out.println(end - start);
когда я оптимизирую блок кода. Как я могу аннотировать те коды, которые быстро вычисляют время, как показано ниже?
//start = System.currentTimeMillis();
{
...
this.dosomething();
}
//end = System.currentTimeMillis();
//System.out.println(end - start);
Ответы
Ответ 1
Просто используйте профилировщик. Он автоматически обрабатывает ваш код с минимальной площадью, отображая различные статистические данные и горячие точки. Отметьте профайлер встроенный в JVisualVM, JProfiler или YourKit.
Если вам это не нужно, вы ничего не платите за него.
Ответ 2
Вы можете использовать annotation processing
для создания compile time
annotations
и генерировать исходный код на основе этого.
В этой статье обсуждается, как сгенерировать код Properties via Annotation Processing
с помощью аннотаций.
Вы можете определить пользовательские аннотации, такие как @Start
, @End
, @Calculate
и использовать их, как показано ниже. Если вы не создадите исходный код, они все равно будут удалены.
@Start
{
...
this.dosomething();
}
@End
@Caclulate
Примечание. Он не может изменять проверенный код, поэтому вам нужно будет создать подкласс.
Ответ 3
Если вам просто нужно что-то простое, вы всегда можете иметь переменную debug
(boolean), которая истинна, когда вы хотите напечатать отладочную информацию, например:
if (debug) start = System.currentTimeMillis();
{
...
this.dosomething();
}
if (debug) {
end = System.currentTimeMillis();
System.out.println(end - start);
}
Когда я это делаю, я часто устанавливаю debug
с помощью аргументов командной строки, поэтому не нужно менять код для переключения режима отладки.
EDIT: Если вы захотите повторить эту структуру в другом месте программы, я обязательно поеду с AOP, как указано в других ответах.
Ответ 4
Отделив код для измерения производительности от основного кода с самого начала. Выполните одно из следующих действий:
- как chm052, описанный в его ответе, с некоторым флагом и охраняемыми командами;
- с использованием структуры ведения журнала с этими защищенными командами, например. SLF4J;
- с помощью (микро-) бенчмаркинга, который поможет вам с хорошими измерениями времени, статистикой и защищенными командами (например, через AspectOrientedProgramming). Вы должны обязательно использовать такой инструмент для получения разумных измерений (см., Например, fooobar.com/questions/10155/...).
Ответ 5
Подход, предложенный chm052, безусловно, будет работать, но он будет связывать логику времени измерения времени с вашим бизнес-методом, что нежелательно. После того, как весь метод написан для выполнения "dosomething()" - и до и после этого вы хотите измерить время. Завтра вы захотите зарегистрировать ссылку операторов "ввод методов/выхода из метода doSomething", через некоторое время вы, вероятно, захотите проверить разрешения на то, можно ли вообще запускать этот код.
Надеюсь, у вас есть моя точка зрения, хотя этот подход хорош для простых проектов, он будет загрязнять ваш код несвязанными проблемами.
Существует несколько методов.
-
AOP, это уже было предложено Йоахимом Исаксоном. АОП действительно сияет в этой области. Создайте совет, в котором вы будете использовать логику timemeasurement, и вы готовы к работе.
-
Если вы хотите/должны придерживаться технологий ООП, я предлагаю вам создать Proxy
или Decorator
Технически это действительно близко друг к другу, единственное, что вы помните о намерении вашей заботы.
Надеюсь, что это поможет
Ответ 6
Я не очень понимаю ваш смысл. если вы просто хотите прокомментировать код, то короткое сокращение - ctrl +/in eclipse. И если вы попытаетесь найти такой код в своем проекте, вы можете использовать log4j для выполнения такого рода действий.