Мне нужно многократно добавлять строки (примерно 50 раз), что является подстрокой другого StringBuilder. Мне нужно сделать это для 30к входов. Мне требуется около 6 минут.Append Strings - проблема с производительностью - Java 6
StringBuilder input = new StringBuilder(10000);
StringBuilder output = new StringBuilder(10000);
// цикл до конца файла, который считывает строки в переменную 'вход'
{
output.append(input.substring(1, 8));
output.append(input.substring(33, 45));
output.append(input.substring(20, 25)); // and so on
}
Это заняло около 6 минут.
Итак, я пытался что-то вроде
{
output.append(input.substring(1, 8) + output.append(input.substring(33, 45) + output.append(input.substring20, 25) + .. // and so on);
}
Это, также принимая в то же время. Я знаю, что оба они одинаковы.
Но, хотя я использую StringBuilder, почему все же у меня есть отставание в производительности? Есть ли что-то, что я делаю неправильно?
Я упомянула: StringBuilder vs String concatenation in toString() in Java и String concatenation in Java - when to use +, StringBuilder and concat и еще несколько. Большинство из них предлагают использовать StringBuilder.
Я предлагаю GC мониторинга деятельности в то время как ваш цикл продолжается. Вы можете столкнуться с ограничениями по памяти. –
«Я знаю, что оба они одинаковы». Нет, они не. Второй код преобразует 'output' в строку на каждой итерации и использует конкатенацию строк. Вы определенно не хотите этого делать. –
Возможно, это ваша проблема: «для цикла до конца файла, который считывает строки в переменную« input »? Покажите нам, как вы настраиваете читателя и как вы читаете. – Seelenvirtuose