【发布时间】:2011-02-23 21:32:54
【问题描述】:
我有这段代码来连接一些数组元素:
StringBuilder sb = new StringBuilder();
private RatedMessage joinMessage(int step, boolean isresult) {
sb.delete(0, sb.length());
RatedMessage rm;
for (int i = 0; i <= step; i++) {
if (mStack[i] == null)
continue;
rm = mStack[i].getCurrentMsg();// msg is built upfront, this just returns, it's a getter method call
if (rm == null || rm.msg.length() == 0)
continue;
if (sb.length() != 0) {
sb.append(", ");
}
sb.append(rm.msg);
}
rm.msg=sb.toString();
return rm;
}
重要的是,该数组最多可容纳 10 个项目,所以数量并不多。
我的跟踪输出告诉我这个方法被调用了 18864 次,16% 的运行时间都花在了这个方法上。我可以进行更多优化吗?
【问题讨论】:
-
您的方法说它有一个 RatedMessage 的返回类型,但它似乎返回一个字符串。这是怎么回事?另外,这些 rm.msg 对象有多大,它们是字符串还是调用了隐式 toString?
-
抱歉,我已将代码缩减为基本部分。每个味精都有一个速率、浮点数。 rm 代表额定消息。
-
@Pentium10,我觉得你剪得太多了。你有一个热点,你基本上假设某些事情不是问题,然后询问其余的事情。如果您的工作代码显示仍然很慢但更简单(如果在给出错误答案的意义上被破坏),那很好,但不要剪掉太多并期望在这里得到有意义的答案。
-
给你,你有所有的东西。对不起。
-
代码可能在中间做其他事情。 StringBuilder、数组访问和for循环已经有了很好的性能。你还在那里做什么?
标签: java concatenation stringbuilder