Заключение в кавычки Jacob Hallen :
надлежащее использование
__slots__
должно оставить свободное место в объектах. Вместо того, чтобы иметь динамический dict, который позволяет добавлять атрибуты к объектам в любое время, существует статическая структура, которая не позволяет дополнения после создания. [Это использование__slots__
устраняет издержки одного dict для каждого объекта.], В то время как это иногда - полезная оптимизация, было бы абсолютно ненужным, если бы интерпретатор Python был достаточно динамичным так, чтобы это только потребовало бы dict, когда на самом деле были дополнения к объекту., К сожалению, существует побочный эффект к слотам. Они изменяют поведение объектов, которые имеют слоты способом, которыми могут злоупотребить препоны статического контроля типов и любители командовать. Это плохо, потому что любители командовать должны злоупотреблять метаклассами, и препоны статического контроля типов должны оскорблять декораторов, с тех пор в Python, должен быть только один очевидный способ сделать что-то.
Создание CPython, достаточно умный для обработки оставляющего свободного места без
__slots__
, является основным обязательством, которое является, вероятно, почему это (еще) не находится в списке изменений для P3k.
Я не использовал его, но наткнулся на perf4j недавно.
Не прямой ответ на ваш вопрос, но я также часто использую этот совет, чтобы приурочить свой код, и просто написал следующий простой шаблон Eclipse -> Surround With:
long startTime = System.currentTimeMillis();
${line_selection}${cursor}
long totalTime = System.currentTimeMillis() - startTime;
System.out.println("Total time = " + totalTime);
System.out.println();
JUnit 4 получил встроенную функцию ограничения времени.
@Test (timeout = X)
должен помочь. X - максимальное количество миллисекунд, в течение которого метод может выполняться.
есть StopWatch из commons-lang, он также позволяет разделить таймер.
Какую помощь вы ищете для решения этой проблемы? У вас есть основы. Вы получаете истекшее время в наносекундах с точностью до любого разрешения, на которое способна базовая ОС / оборудование.
Также ... и я знаю, что вы сказали, что профилировщиков нет ... но у меня был выдающийся опыт работы с YourKit . Он предоставляет API, который можно использовать для управления профилированием извне. В зависимости от вашей конкретной проблемы, возможно, стоит взглянуть на эту.
Если вы используете Spring, у вас уже есть хороший класс под названием StopWatch в вашем пути к классам для этого предложения.