在java中,如何快速注释几行代码?
我想测试某些代码块的运行时间,如下所示:在java中,如何快速注释几行代码?,java,debugging,annotations,Java,Debugging,Annotations,我想测试某些代码块的运行时间,如下所示: start = System.currentTimeMillis(); { ... this.dosomething(); } end = System.currentTimeMillis(); System.out.println(end - start); 当我优化代码块时,如何注释那些计算时间很快的代码,如下所示 //start = System.currentTimeMillis(); { ... this.dosome
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);
如果您只是想要一些简单的东西,那么当您想要打印调试信息时,您可以始终拥有一个
debug
(布尔)变量,该变量为true,例如:
if (debug) start = System.currentTimeMillis();
{
...
this.dosomething();
}
if (debug) {
end = System.currentTimeMillis();
System.out.println(end - start);
}
在执行此操作时,我经常使用命令行参数设置debug
,因此无需更改代码即可切换调试模式
编辑:如果你想在程序的其他地方重复这个结构,我肯定会像其他答案中提到的那样使用AOP。我不太清楚你的意思。如果您只想对代码进行注释,那么在eclipse中的捷径是ctrl+/。如果您试图在项目中对这类代码进行分类,您可以使用log4j来完成这类工作。您可以使用
注释处理
来创建编译时注释
并基于此生成源代码
本文讨论如何使用注释生成代码。
您可以定义自定义注释,如@Start
、@End
、@Calculate
,并使用它们,如下所示。如果不生成源代码,它们无论如何都会被删除
@Start
{
...
this.dosomething();
}
@End
@Caclulate
注意:它不能修改正在检查的代码,因此您需要创建子类。将用于性能度量的代码与主代码从一开始分离。执行以下操作之一:
start = System.currentTimeMillis();
{
...
this.dosomething();
}
end = System.currentTimeMillis();
System.out.println(end - start);
- 正如chm052在其anwswer中所述,带有一些旗帜和警戒命令李>
- 通过将日志框架与这些受保护的命令一起使用,例如:李>
- 通过使用,它可以帮助您进行良好的时间测量、统计和保护命令(例如,通过AspectOrientedProgramming)。您绝对应该使用这样的工具来获得合理的测量结果(参见示例)
chm052提出的方法肯定会起作用,但它会将时间度量时间逻辑与您的业务方法相耦合,这是不可取的。在编写完所有方法以执行“dosomething()”——在这些方法之前和之后,您需要测量时间。明天您将需要记录“输入方法/离开方法doSomething”的语句链接,稍后您可能需要检查是否可以运行此代码的权限
我希望您理解我的观点,虽然这种方法适用于简单的项目,但它会用不相关的问题污染您的代码
有两种技巧
AOP,这是约阿希姆·伊萨克森提出的。AOP在这一领域非常出色。创建一个建议,在那里你可以使用你的时间测量逻辑,你就可以开始了
如果你想/需要坚持OOP技术,我建议你创建一个
或
从技术上讲,这两种关系非常密切,只是你如何记住你关心的意图
希望这有帮助,只需使用分析器即可。它将以最小的占用空间自动插入代码,显示各种统计数据和热点。查看探查器,或者
当您不需要它时,您不需要为它支付任何费用。类似于?的东西不是您问题的答案,但请不要使用System.currentTimeMillis()
为了进行基准测试,请改用System.nanoTime()
。请阅读这个问题的答案:原始海报没有指出他们正在使用哪个IDE(Eclipse只是众多可能性之一)。另外,你需要扩展你的答案来解释为什么log4j会有帮助,因为我不知道怎么做。我刚刚加入了这个伟大的地方,所以不知道规则是什么,我很高兴与大家分享我的想法。但是如果这是不允许的,那么我对此感到抱歉。如果没有人们分享他们的想法,StackOverflow就不会存在——这很好。但它也因同行评议和建设性批评而蓬勃发展。并不是你给出的每一个答案都是正确的,如果别人质疑你的答案,不要受伤是很重要的。顺便说一句,并非所有的注释都是正确的:-)如何使用探查器测试特定代码块的运行时间(如果代码块既不是单个操作也不是完整的方法)?@DaveBall:确实不可能。我想解决这个问题最简单的方法就是简单地提取方法(这本身通常是个好主意)