Вы можете использовать getMIDINoteData()
, чтобы получить массив AKMIDINoteData
, отфильтровать ненужные ноты, а затем перезаписать музыкальную дорожку, используя replaceMIDINoteData()
с фильтрованным массивом:
// remove a C at timestamp 4.0
var trackData = myTrack.getMIDINoteData()
trackData = trackData.filter { [110].noteNumber =! 60 &&
[110].duration =! AKDuration(beats: 4.0) }
myTrack.replaceMIDINoteData(with: trackData)
[117 ] Есть и другие примеры использования getMIDINoteData()
в примере проекта MIDIFileEditAndSync .
Сделайте, чтобы Вы рассмотрели глупый случай:
System.out.println(" Print " + object.changeState() );
Я не думаю, что это происходит, но возможности являются println, выполняет метод, который на самом деле выполняет некоторое действие, на котором система зависит от и может представить тонкие ошибки (верьте мне или нет, но я засвидетельствовал это),
Вероятно, замена регистратором и отключение регистраторов могут сделать.
Или создание несуществующего объекта с помощью шаблона NullObject:
public final class DevNull {
public final static PrintStream out = new PrintStream(new OutputStream() {
public void close() {}
public void flush() {}
public void write(byte[] b) {}
public void write(byte[] b, int off, int len) {}
public void write(int b) {}
} );
}
И замена
System.out.println();
С
DevNull.out.println();
Log4E является плагином затмения, который имеет функцию "Replace System.out.println ()". Это счастливо преобразует все те противные вызовы println в вызовы log4j. Это даже перенесет их с проверкой уровня журнала.
При расширении понятия Оскара можно сделать еще лучше, по моему скромному мнению:
if(!DEBUG) {
System.setOut(
new PrintStream(new OutputStream() {
public void close() {}
public void flush() {}
public void write(byte[] b) {}
public void write(byte[] b, int off, int len) {}
public void write(int b) {}
} );
}
}
В этом случае, если Вы не находитесь в режиме отладки или ком-либо другом, который система по умолчанию заменяется внутренне с devNull реализацией, еще это работает как ожидалось. Таким образом, Вы ничего не должны находить и заменять в своем коде.
Вы могли использовать условную компиляцию, чтобы иметь отладочную сборку с операторами печати и сборку конечных версий без них.
В основном идея состоит в том, чтобы создать заключительный статический класс с заключительной статической булевской переменной, которую Вы используете в качестве переключателя во время компиляции.
public final class Debug {
//set to false to allow compiler to identify and eliminate
//unreachable code
public static final boolean ON = true;
}
Затем можно просто заменить весь Ваш System.out.println
операторы с
if(Debug.ON)
{
System.out.println...
}
Так как компилятор проигнорирует любые недостижимые ответвления кода, можно просто установить ON = false
когда Вы сделаете сборка конечных версий и операторы печати будут исключены из Вашего байт-кода.
Примечание: Это не имеет дело со случаем, на который указал Оскар, где оператор печати может изменить состояние некоторого объекта. Вы могли использовать условную компиляцию для печати к несуществующему объекту, когда в режиме выпуска, поскольку он предложил, вместо того, чтобы удалить печать в целом.
Вы могли запустить путем вызова Systems.setOut и передачи в собственном OutputStream, который ничего не делает. Это поможет Вам видеть, существует ли усиление производительности. Это более безопасно, чем удаление их (по причине что Оскар, на который указывает - кодирование побочный эффект). Если увеличение производительности незначительно затем, Вы могли бы хотеть сфокусировать свои усилия в другом месте.
Две проблемы с моим выше метода:
Однако это - хороший быстрый тест, чтобы видеть, получаете ли Вы увеличение производительности, Вы ищете.
Лично я использовал бы {}
вместо этого, но я думаю, что это работает все равно.
Я записал regex в жемчуге, который заменяет строку "System.out.println"";//System.out.println". Я полагаю, что существует очень немного случаев, где это повредило бы сборку. Это "еще" просто стало бы; который компилируется для обнуления инструкций по байт-коду.
Похоже, что это - то, что Вы предложили. Это работало на меня - кроме того, если у Вас есть дополнительные операторы на той же строке. Однако это - плохой стиль для начала (и я знал, что не сделал этого).
Вы полагали, что редактирование тех исходных файлов удаляет строки?
Вы могли бы найти, что это будет только разработчик несколько дней, чтобы пройти и избавиться от большинства из них. У нас была подобная проблема, и я просто встал действительно рано и прошел все наши файлы, избавляющиеся от мусора.
Я использовал Eclipse и уборку на функции сохранения к импорту очистки и материалу одновременно.
Вполне терапевтическая вещь сделать!