В 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 для выполнения такого рода действий.