作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
=0;--6ren">
我有一个这样的 for 循环:
String myString = "123456789";
String prefix = null;
for (int i=6;i>=0;--i)
{
prefix = myString.substring(0,i);
process(prefix);
}
问题是,如果这段代码被执行N次,将会创建N*7个字符串(每次执行都会创建7个字符串——因为substring方法创建了一个新的String并且这个方法被调用了7次每次执行)。我正在考虑如何在这种情况下提高性能。我想知道是否有一种方法每次执行只使用一个字符串,每次都修改它。这就是 StringBuilder 的目的,但我认为 StringBuilder 在这种情况下没有帮助:
String myString = "123456789";
StringBuilder prefix = new StringBuilder(myString);
for (int i=6;i>=0;--i)
{
prefix.delete(i,prefix.length());
process(prefix.toString());
}
在这种情况下,prefix 总是引用同一个 StringBuilder 对象,但同样的问题出现在另一个地方,因为 prefix.toString() 总是返回一个新的 String 对象。
有什么想法吗?
(我知道这个话题已经被处理过很多次了。但是我已经做了一些搜索,但我没有找到解决方案,也许这是内存的最小使用?)
谢谢你的帮助
最佳答案
虽然 myString.substring(0, i)
确实创建了一个新的 String
对象,但请注意,这不会复制底层字符数据。
在对这段代码做任何事情之前,我会使用分析器来验证这确实是一个瓶颈(无论是在 CPU 使用方面,还是在垃圾收集器的压力方面)。
关于java - 弦乐与表演,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822285/
我在 Rails 应用程序中有一个花哨的“工作表”样式 View ,加载时间太长。 (在开发模式下,是的,我知道那里没有缓存,“在 57893 毫秒内完成(查看:54975,DB:855)”)工作表是
我是一名优秀的程序员,十分优秀!