Stiamo utilizzando Java SAX per eseguire il parser su file XML molto grandi. Il nostro characters
realizzazione appare come segue:Modo efficace di creare una stringa da char [], start, length in Java
@Override
public void characters(char ch[], int start, int length) throws SAXException {
String value = String.copyValueOf(ch, start, length);
...
}
(ch[]
array passati dal SAX tendono ad essere piuttosto lungo)
Ma noi sono stati recentemente sempre alcuni problemi di prestazioni e il profiler ci mostra che oltre il 20% della nostra CPU l'utilizzo è sopra invocazione di String.copyValueOf
(che ha invocato new String(ch,start,length)
sotto il cofano).
Esiste un modo più efficace per ottenere una stringa dall'array di caratteri, iniziare l'indice e la lunghezza rispetto a String.copyValueOf(ch, start, length)
o new String(ch,start,length)
?
Potrebbe essere peggio, ma hai provato un 'StringBuilder'? 'new String (ch, start, length)' copia solo l'array ma non so quanto velocemente un 'StringBuilder' funzioni. – Djon
La stringa creata non viene restituita. Cosa fai con esso? Potrebbe quello che viene fatto con quella stringa anche essere fatto direttamente su char [] con start e length? – Fildor
@ Fildor Sì, ci ho pensato. Ma facciamo molte diverse operazioni con esso dove lo trattiamo come stringhe. Sarebbe estremamente difficile (o almeno il codice sarebbe davvero brutto) operare su array di carri armati. –