Chúng tôi đang sử dụng Java SAX để phân tích cú pháp trên các tệp XML thực sự lớn. thực hiện characters
của chúng tôi trông giống như sau:Cách hiệu quả để tạo chuỗi từ char [], bắt đầu, chiều dài trong Java
@Override
public void characters(char ch[], int start, int length) throws SAXException {
String value = String.copyValueOf(ch, start, length);
...
}
(ch[]
mảng thông qua SAX có xu hướng được khá lâu)
Nhưng gần đây chúng ta đang nhận được một số vấn đề hiệu suất và các hồ sơ cho chúng ta thấy rằng hơn 20% CPU của chúng tôi mức sử dụng cao hơn yêu cầu String.copyValueOf
(được gọi new String(ch,start,length)
dưới mui xe).
Có cách nào hiệu quả hơn để lấy Chuỗi từ chuỗi ký tự, chỉ mục bắt đầu và độ dài hơn String.copyValueOf(ch, start, length)
hoặc new String(ch,start,length)
không?
Nó có thể tồi tệ hơn, nhưng bạn đã thử một 'StringBuilder' chưa? 'String mới (ch, start, length)' chỉ sao chép mảng trên nhưng tôi không biết công việc 'StringBuilder' có thể nhanh đến mức nào. – Djon
Chuỗi được tạo không được trả lại. Bạn sẽ làm gì với nó? Có thể đó được thực hiện với chuỗi đó cũng được thực hiện trực tiếp trên char [] với bắt đầu và chiều dài? – Fildor
@Fildor Vâng, tôi đã nghĩ về điều đó. Nhưng chúng tôi thực hiện nhiều hoạt động khác nhau với chúng tôi, nơi chúng tôi xử lý nó dưới dạng Chuỗi. Nó sẽ là cực kỳ khó (hoặc ít nhất là mã sẽ thực sự xấu xí) để hoạt động trên mảng char. –