Tôi có một câu hỏi liên quan đến hiệu suất liên quan đến việc sử dụng StringBuilder. Trong một vòng rất dài tôi đang thao tác một StringBuilder
và đi qua nó để phương pháp khác như thế này:Có tốt hơn khi sử dụng lại một StringBuilder trong một vòng lặp không?
for (loop condition) {
StringBuilder sb = new StringBuilder();
sb.append("some string");
. . .
sb.append(anotherString);
. . .
passToMethod(sb.toString());
}
là instantiating StringBuilder
tại mỗi chu kỳ vòng lặp là một giải pháp tốt? Và đang kêu gọi xóa thay vì tốt hơn, như sau?
StringBuilder sb = new StringBuilder();
for (loop condition) {
sb.delete(0, sb.length);
sb.append("some string");
. . .
sb.append(anotherString);
. . .
passToMethod(sb.toString());
}
Trường hợp "không tầm thường" là khóa - điểm chuẩn có thể hiển thị một biểu mẫu * tỷ lệ * nhanh hơn, nhưng không có gợi ý về thời gian thực hiện trong ứng dụng thực :) –
Xem điểm chuẩn trong câu trả lời của tôi bên dưới. Cách thứ hai nhanh hơn. – Epaga
@Epaga: Điểm chuẩn của bạn nói rất ít về cải thiện hiệu suất trong ứng dụng thực, nơi mà thời gian thực hiện để phân bổ StringBuilder có thể tầm thường so với phần còn lại của vòng lặp. Đó là lý do tại sao ngữ cảnh lại quan trọng trong điểm chuẩn. –