这是一个函数,我必须创建%.7f格式的时间戳字符串。执行此函数只需2-3毫秒。但它是从我的代码中的许多地方调用的,通过将其优化1毫秒,我将在一个特定的用户操作中节省1秒。有什么想法吗?
public static String makeTimestamp()
{
long millis = System.currentTimeMillis();
String result;
Double ts = new Double((millis) / 1000.0);
ByteArrayOutputStream b = new ByteArrayOutputStream();
PrintStream p = new PrintStream(b);
p.printf("%.7f", ts );
result = b.toString();
try
{
p.close();
b.close();
} catch (IOException ioe) {};
return result;
}
发布于 2011-03-18 15:42:36
如果你确实需要它,这大约比字符串格式化快10倍:
public static String makeTimestamp() {
return formatTime(System.currentTimeMillis(), 7);
}
public static String formatTime(long millis, int fractionDigits) {
int integerDigits = (int) Math.log10(millis / 1000.0) + 1;
char[] chars = new char[integerDigits + fractionDigits + 1];
for (int i = 0; i < chars.length; i++) {
chars[i] = '0';
}
millis *= Math.pow(10, fractionDigits - 3);
for (int i = chars.length - 1; i >= 0; i--) {
if (i == integerDigits) {
chars[i] = '.';
i--;
}
chars[i] = (char) (millis % 10);
chars[i] += '0';
millis /= 10;
}
return new String(chars);
}
发布于 2011-03-18 15:07:55
我不知道它快了多少,但是
public static String makeTimestamp()
{
return String.format("%.7f", ((double)System.currentTimeMillis())/1000);
}
(我不确定为什么我们要把double带到这幅图中)。
发布于 2011-03-18 15:09:07
完全不清楚你为什么要经历PrintStream等等,这有什么问题:
public static String makeTimestamp()
{
long millis = System.currentTimeMillis();
return String.format("%.7f", millis / 1000.0);
}
在我的上网本上,每次迭代大约需要0.04ms……但是即使你的原始代码每次迭代也只需要0.1ms左右。你现在在什么平台上运行需要2-3ms的时间?例如,你是在一个调试器中运行吗?我不明白为什么它会这么慢--我的上网本又不是特别快。
尽管所有的性能都很重要,但我想说的是,与原来的方法相比,上述方法的主要优点是简单。原始的是非常复杂的,没有任何好的理由。
https://stackoverflow.com/questions/5349018
复制相似问题