ฉันไม่คิดว่าจะมีเหตุผลที่จะพยายามเพิ่มประสิทธิภาพเช่นนั้น วันนี้ (2019) สถิติทั้งสองกำลังทำงานประมาณ 11 วินาทีสำหรับ 100.000.000 ลูปบนแล็ปท็อป I5 ของฉัน:
String a;
StringBuilder sb = new StringBuilder();
long time = 0;
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
sb3.append("someString2");
sb3.append("someStrin4g");
sb3.append("someStr5ing");
sb3.append("someSt7ring");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
sb.append("someString2");
sb.append("someStrin4g");
sb.append("someStr5ing");
sb.append("someSt7ring");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 11000 msec (การประกาศภายในลูป) และ 8236 msec (การประกาศนอกลูป)
แม้ว่าฉันจะใช้โปรแกรมสำหรับการลบที่อยู่โดยมีบางพันล้านลูปซึ่งต่างกัน 2 วินาที สำหรับ 100 ล้านลูปไม่ได้สร้างความแตกต่างใด ๆ เนื่องจากโปรแกรมนั้นทำงานเป็นเวลาหลายชั่วโมง โปรดทราบว่าสิ่งต่าง ๆ จะแตกต่างกันหากคุณมีคำสั่งต่อท้ายเพียงคำสั่งเดียว:
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 3416 msec (วงใน), 3555 msec (วงนอก) คำสั่งแรกที่สร้าง StringBuilder ภายในวงจะเร็วกว่าในกรณีนั้น และหากคุณเปลี่ยนลำดับการดำเนินการจะเร็วกว่ามาก:
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 3638 msec (วงนอก), 2908 msec (วงใน)
ขอแสดงความนับถือ Ulrich