我已经建立了一个记录功能如下:转换一个正常功能的通用功能,用于优化
void log (String output)
{
if(debug)
{
String val = <some string captured>;
Log.write("Logging: " + val + output, this.handle);
}
}
这log
在几个地方如被使用,
log("value is " + str + " " + val); // 'str','val' can be a string or class with '.toString()'
log("error: " + e1 + ". Exiting."); // 'e1' can be a class with overloaded '.tostring()'
现在的问题是(作为代码评论评论),即使debug
条件不是ON,也会发生class
对象字符串转换。在几个地方,这会导致不必要的性能降级。
我不想混乱我的代码,把if()
条件放在哪里,只有output
重要,其余部分重复。使用Java设施解决此问题的最佳方法是什么?
我想使用泛型的:
<T> void log (String output, T arg)
{
if(debug)
{
String val = <some string captured>;
Log.write("Logging: " + val + output + arg.toString(), this.handle);
}
}
将这种方法做一个很好的优化?另外,我是否可以优雅地扩展这个泛型函数以接受多个参数?
+1好的答案。还有一个查询:没有'debug'条件,仍然会调用'log'函数。我担心,我也可以获得代码评论评论。我可以告诉他们,即使保存一个函数调用也是不成熟的优化吗? (注意:执行时多次调用函数) – iammilind 2011-12-22 09:29:07
@iammilind:我不知道。典型的方法是在函数调用周围放置调试条件,尽管调用不执行任何操作的函数不应该严重影响性能。 – axtavt 2011-12-22 09:49:49
我明白了。最好保留典型的方法,其中日志包含在'if()'条件中。谢谢。 – iammilind 2011-12-22 09:56:51