|
|
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
есть StringBuilder sf = new StringBuilder(250000); в цикле он заполняется примерно так sf.append("лялялялялялялял).append(String) .append(int) .append("d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh") и т.д. длина sf может быть различна максимальная длина заполняется 50мс можно как-либо ускорить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 08:20 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя, Никак, AFAIK chain append наиболее эффективный в данном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 08:58 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя, Можно поэкспериментировать с char[]. Но выгода будет далеко не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 09:02 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
если тут .append("d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh") "d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh" заменить на константу finaly , будет какой-то смысл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 09:47 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяесли тут .append("d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh") "d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh" заменить на константу finaly , будет какой-то смысл? Нет. Вообще ИМХО, вы не с того боку к решению проблемы подошли. Опишите картину шире. Почему именно это место вызывает проблему? Какая задача решается? Заполнение шаблона или что-то ещё? Почему её нужно оптимизировать, а не, например, распараллелить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 09:54 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяесть StringBuilder sf = new StringBuilder(250000); в цикле он заполняется примерно так sf.append("лялялялялялялял).append(String) .append(int) .append("d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh") и т.д. длина sf может быть различна максимальная длина заполняется 50мс можно как-либо ускорить? StringBuilder практически невозможно ускорить. Он достаточно хорош для 99% случаев. Но можно посмотреть алгоритм которые его обрамляет и поставить вопрос с другого ракурса. Для чего нужно с огромной скоростью фабриковать строки? Что дальше с ними делать? Где тот process-consumer который сможет их так-же быстро заглатывать? Сможет-ли вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 11:09 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
авторНет. Вообще ИМХО, вы не с того боку к решению проблемы подошли. Опишите картину шире. из базы приходит N записей в ResultSet из них нужно сформировать строку содержащую html код таблицы с заполненной данными из ResultSet когда данных мало - летает. но есть наборы дофига строк.... это, конечно не правильно, и я против того чтоб на клиента гнать стока записей, но это тот случай, когда это как-бы ну.... можно и на клиенте сфомировать саму таблицу, но сервер быстрее... тут конечно и на передачу по сети (правда локальной) время идет... вот така проблемка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 13:11 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя, и вы уверены, что дело именно в StringBuilder? Крайне сомнительно. Как замеряли? Менять statement.setFetchSize(int rows) пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 13:29 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя.... из базы приходит N записей в ResultSet Сомневаюсь, что в данном случае будет тормозить StringBuilder. Сейчас посмотрел на исходники на grepcode.com , выделение памяти достаточно не эффективно. Всегда ровно под размер добавляемой строки увеличивает. Можно, в принципе: 1. Сделать свою процедуру (типа fastAppend) и оптимизировать выделение памяти (заранее перед вызовом append добавлять память большими кусками через ensureCapacity). 2. Периодически, например перед обработкой каждой строки докидывать в StringBuilder достаточно большой объем памяти. В общем, если grepcode.com не врет, вырвать руки и ноги тем, кто StringBuilder писал. И переставить местами. Что у них руки сразу торчали из того места, откуда следует (т.е. из пятой точки). To All: а почему авторы JRE любят классы делать final? Нафига? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 13:45 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
p.s. Первую строчку в пред. сообщение удалить. Вроде, судя по исходникам, StringBuilder сделан через одно место ((( Действительно ДОЛЖЕН тормозить и не по детски. Тесты не писал и не проверял, пускай этим автор топика заморачивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 13:47 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя, авториз базы приходит N записей в ResultSet .... когда данных мало - летает. но есть наборы дофига строк.... ... вот така проблемка Вадя, на твой вопрос есть два варианте ответа - плохой и матерный. Дам плохой ответ. Оставь в покое, по возможности навсегда , StringBuilder. Уточнение - ни в коем случае не оставляй в покое и обязательно усовершенствуй StringBuilder (например, по советам Leonid Kudryavtsev ), если другого занятия ты для себя придумать не можешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:00 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
vslвадя, и вы уверены, что дело именно в StringBuilder? Крайне сомнительно. Как замеряли? Менять statement.setFetchSize(int rows) пробовали? измеряю так long start = System.nanoTime(); ............................ System.out.println("time " + (System.nanoTime() - start)); StringBuilder один из моментов, statement.setFetchSize(int rows) пока не пробывал, не дошёл. оптимизирую по кускам. автор1. Сделать свою процедуру (типа fastAppend) и оптимизировать выделение памяти (заранее перед вызовом append добавлять память большими кусками через ensureCapacity). у меня вроде для выделения памяти есть заранее StringBuilder sf = new StringBuilder(250000); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:01 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev Сейчас посмотрел на исходники на grepcode.com , выделение памяти достаточно не эффективно. Всегда ровно под размер добавляемой строки увеличивает. Это если каждый раз добавлять строку, которая длиннее sb в 2 раза+2. int newCapacity = (value.length + 1) * 2; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:07 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя, автороптимизирую по кускам. ты не по тем кускам оптимизируешь. у тебя нет права ждать результата от оптимизации куска, выбранного путем тыканья пальца в позапрошлогодний снег. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:12 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяавторНет. Вообще ИМХО, вы не с того боку к решению проблемы подошли. Опишите картину шире. из базы приходит N записей в ResultSet из них нужно сформировать строку содержащую html код таблицы с заполненной данными из ResultSet Вопрос ребром: зачем формировать ответ целиком в памяти, почему не отдавать на клиент частями? Типа такого: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:14 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяавторНет. Вообще ИМХО, вы не с того боку к решению проблемы подошли. Опишите картину шире. из базы приходит N записей в ResultSet из них нужно сформировать строку содержащую html код таблицы с заполненной данными из ResultSet когда данных мало - летает. но есть наборы дофига строк.... это, конечно не правильно, и я против того чтоб на клиента гнать стока записей, но это тот случай, когда это как-бы ну.... можно и на клиенте сфомировать саму таблицу, но сервер быстрее... тут конечно и на передачу по сети (правда локальной) время идет... вот така проблемка Да, тут простор для оптимизиации нереальный. 1. Нафига тут String/StringBuilder вообще? Гнать потоком все данные через Writer или даже OutputStream прямо в отклик. 2. Можно, конечно, завести огромный массив, забитый пробелами, с готовым шаблоном. А значения пихать только по индексу. Но это оверхед и ничем не лучше предыдущего варианта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:35 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, авторДа, тут простор для оптимизиации нереальный. Нет. Простор для оптимизации всегда реальный. Да, оптимизация может закончиться заменой алгоритма. Но обычно она начинается с профилировки существующего кода и оценки суммарных долей времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:41 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
boobyавторДа, тут простор для оптимизиации нереальный. Нет. Простор для оптимизации всегда реальный. Русский язык стоит подтянуть. "Нереальный" в данном случае "невероятно огромный", "необъятный". boobyДа, оптимизация может закончиться заменой алгоритма. Небо синее, вода мокрая. boobyНо обычно она начинается с профилировки существующего кода и оценки суммарных долей времени. Профилировка обычно заканчивается тем что суммарные доли времени равномерно размазаны по всему коду. Вы ещё вот этим ребятам расскажите. С 4й минуты про профилировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 14:55 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяавторНет. Вообще ИМХО, вы не с того боку к решению проблемы подошли. Опишите картину шире. из базы приходит N записей в ResultSet из них нужно сформировать строку содержащую html код таблицы с заполненной данными из ResultSet когда данных мало - летает. но есть наборы дофига строк.... это, конечно не правильно, и я против того чтоб на клиента гнать стока записей, но это тот случай, когда это как-бы ну.... можно и на клиенте сфомировать саму таблицу, но сервер быстрее... тут конечно и на передачу по сети (правда локальной) время идет... вот така проблемка Вадя. В твоём коде блокером (скорее всего) будет ожидание записи в сокет в тот момент когда ты наколдовал свою гигабайтную html-ку и отдаёшь ее клиенту. И здесь попытка оптимизировать StringBuilder выглядит наивной и эпичной. Работай напрямую с *Response.write(..) и получишь нужную золотую середину между асинхронностью и скоростью разработки. StringBuilder - это просто удобный фасад к char[] и больше там ничего наковырять нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:04 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
авторВопрос ребром: зачем формировать ответ целиком в памяти, почему не отдавать на клиент частями? автор1. Нафига тут String/StringBuilder вообще? Гнать потоком все данные через Writer или даже OutputStream прямо в отклик. этот вариант тоже рассматривается, но под него на клиенте надо переделывать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:05 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, авторРусский язык стоит подтянуть Подтягивайте, желательно с усердием. "невероятно огромный", "необъятный" в русском языке не синонимы для "все равно, с чего начать оптимизацию" авторПрофилировка обычно заканчивается тем что суммарные доли времени равномерно размазаны по всему коду. 10/10 - у Вади это не так , при правильном сложении циферок. Он же именно русским языком, а не каким-нибудь другим сообщил: авториз базы приходит N записей в ResultSet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:06 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяэтот вариант тоже рассматривается, но под него на клиенте надо переделывать.. Клиент-то тут при чем? Ему всё равно как именно сервер отдаёт текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:07 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
booby"невероятно огромный", "необъятный" в русском языке не синонимы для "все равно, с чего начать оптимизацию" Спасибо, КЭП. [/quot] авторПрофилировка обычно заканчивается тем что суммарные доли времени равномерно размазаны по всему коду. 10/10 - у Вади это не так , при правильном сложении циферок. Он же именно русским языком, а не каким-нибудь другим сообщил: авториз базы приходит N записей в ResultSet[/quot] [/quot] Очевидно что ни одного сервера работающего с БД вы не профилировали. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:09 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
0FD...Это если каждый раз добавлять строку, которая длиннее sb в 2 раза+2. int newCapacity = (value.length + 1) * 2; Опппс.... Беру свои слова обратно. Слона и не заметил. Ну тогда у них все хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:12 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвадяэтот вариант тоже рассматривается, но под него на клиенте надо переделывать.. Клиент-то тут при чем? Ему всё равно как именно сервер отдаёт текст. ну если по частям - то надо как-то эти части обрабатывать. меня в данном случае интересует оптимизация StringBuilder потому, что может я чего по нему не знаю. а так - надо в комплексе смотреть - на весь путь . эта часть по java поэтому тут и интересуюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:14 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяменя в данном случае интересует оптимизация StringBuilder не понятно, с чего Вы взяли, что тормозит именно StringBuilder ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:17 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяBlazkowiczпропущено... Клиент-то тут при чем? Ему всё равно как именно сервер отдаёт текст. ну если по частям - то надо как-то эти части обрабатывать. Ну, по каким ещё частям, если клиент с сервера всегда читает поток данных. Какие тут части могут быть? Разве что Content-Length не известен. вадяменя в данном случае интересует оптимизация StringBuilder потому, что может я чего по нему не знаю. Нечего там оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:18 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
авторНечего там оптимизировать. ответ устраивает!!! меньше неизвестных - ближе решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:22 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczОчевидно что ни одного сервера работающего с БД вы не профилировали. Удачи. Таки да. Ни одного java-based сервера, по счастью , я не профилировал, и сохраняю некоторую, с каждым днем слабеющую, надежду, что никогда не придется . Это как раз именно и специально вам удачи . При вашем заходах на необъятности только удача и счастливый случай могут помочь. Впрочем, ведь все это не имеет значения. Повозившись со StringBuilder-ом в собственное удовольствие, вполне можно с абсолютно легкой душой объявить любой код абсолютно и окончательно оптимизированным в произвольно взятый момент времени. Так ведь? Или, наоборот, уверенно заявить о необъятном поле для оптимизации и еще повозиться со стрингбилдером, в свое удовольствие, произвольно взятое на это дело время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:31 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
boobyТаки да. Ни одного java-based сервера, по счастью , я не профилировал, ...но мнение имею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:37 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяиз базы приходит N записей в ResultSet из них нужно сформировать строку содержащую html код таблицы с заполненной данными из ResultSet когда данных мало - летает. но есть наборы дофига строк.... это, конечно не правильно, и я против того чтоб на клиента гнать стока записей, но это тот случай, когда это как-бы ну.... можно и на клиенте сфомировать саму таблицу, но сервер быстрее... тут конечно и на передачу по сети (правда локальной) время идет... вот така проблемка С таким подходом GC сляжет первым, ведь для каждого клиента резервируется куча памяти под String. Все же потоковая передача данных здесь будет единственным верным решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:39 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
BlazkowiczboobyТаки да. Ни одного java-based сервера, по счастью , я не профилировал, ...но мнение имею. Да. Ваше право игнорировать мое мнение не может отменить сам факт его существования. И попутно, в том, ява может быть важнее здравого смысла (для некоторых так и есть) - я не сомневаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:52 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
авторВсе же потоковая передача данных здесь будет единственным верным решением. вот она ява, сама прет. единственным решением какой задачи? А пофигу какой. Здесь - любой, вот как раз той самой, какая у Вади. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:55 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
boobyИ попутно, в том, ява может быть важнее здравого смысла (для некоторых так и есть) - я не сомневаюсь. Ну, да. Java сама виновата в том что booby её не осилил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:57 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
booby вот она ява, сама прет. Ай, да Моська... boobyединственным решением какой задачи? "Проблемы", а не "задачи". Задачи решают в школе. Не отвык ещё, что решать можно не только задачи? boobyА пофигу какой. Здесь - любой, вот как раз той самой, какая у Вади. Не читай. Сразу пиши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 15:59 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
авторС таким подходом GC сляжет первым, ведь для каждого клиента резервируется куча памяти под String. Все же потоковая передача данных здесь будет единственным верным решением. для данной задачи пользователей с такими запросами - 1-2 единовременно, и памятью нет проблем- можно добавить :) но и административное решение существует - запретить такие таблицы ( что более правильнее) потоковая - рассматривается, вполне нормальный подход. по данному : Нечего там оптимизировать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 16:11 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя... Нечего там оптимизировать. :) Вадя, ну нельзя же так дословно. Я же буквально несколькими постами выше написал примерно следующее: boobyПовозившись со StringBuilder-ом в собственное удовольствие, вполне можно с абсолютно легкой душой объявить любой код абсолютно и окончательно оптимизированным в произвольно взятый момент времени. Так ведь? вадя, я очень сильно надеюсь, что java здесь все-таки ни при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 16:23 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
BlazkowiczboobyНеуважаемый господин мудезвон. Ваше неумение держать себя в руках не свидетельствует о том, что Вы не знаете java или деталей ее устройства. А вот ваше и желание и готовность с разбегу выдавать необъятных советов, вроде: , явно и однозначно свидетельствует о том, что у Вас отсутствует сформированное представление о том, что такое программирование вообще. Безотносительно к java. С чего оно начинается и чем заканчивается. Правильно. Не говори умных вещей. Называй других дураками. За это тебя и оценят как настоящего эксперта. Про Моську, походу не ошибся. Не напрягайся - я вижу, что ты не ошибся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 16:24 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
про принцип суперпозиции нам ещё в школе твердили. разделить на составляющие и найти суммарное воздействие (как-то так) вот одну из составляющих я и обсудил. есть ещё куча.. но это совсем другая история.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 16:28 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
boobyBlazkowiczпропущено... Правильно. Не говори умных вещей. Называй других дураками. За это тебя и оценят как настоящего эксперта. Про Моську, походу не ошибся. Не напрягайся - я вижу, что ты не ошибся. Товарищ, полученный вами пинок под заднее место, был абсолютно заслужен. Вместо того, чтобы разобраться в причине неудачи, вы усиленно продолжаете наскакивать тем же местом на тот же сапог, это не добавляет вам вистов. Несмотря на некоторую эксцентричность Blazkowicz, КПД его действий на форуме весьма высоко, так что если вам есть что сказать,то говорите по делу, а не вертите дымоходом. П,С. ничего личного - сам не раз получал пинки, которые помогали разораться в проблеме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 16:42 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя, ну и ладно. (а я-то думал, тебя на самом деле производительность твоего кода интересует). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 16:43 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Кстати, парсинг мега-таблицы на клиенте тоже приличное время занимает, особенно если это эксплорер (по крайней мере, старые версии). Вполне вероятно, для данной задачи самым быстрым окажется excel через apache poi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 16:43 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
boobyвадя, ну и ладно. (а я-то думал, тебя на самом деле производительность твоего кода интересует). в общем-то мне и ответили, и варианты предложили. Leonid Kudryavtsev не понятно, с чего Вы взяли, что тормозит именно StringBuilder при таком объёме тормозит всё, но не спрашивать же здесть про оптимизацию базы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 17:20 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадя, все плохо, оказывается. вадя... в общем-то мне и ответили, и варианты предложили. т.е. твой код уже ускорился в степени, которая тебя устраивает - весьма и очень хорошо. или твой код не ускорился еще , но ты, послушав "предложения", профессионально веришь (то есть знаешь ), что точно ускорится в нужной тебе степени сразу после того, как ты наплодишь реализаций изложенных советов - не весьма хорошо, но вполне очень. Ну, а у меня-то, по незнанию явы, сформировалась уверенность в том, что вы тут "просто пообщались". Для дела оптимизации кода это - никак, а для души - вполне хорошо. вадяLeonid Kudryavtsev не понятно, с чего Вы взяли, что тормозит именно StringBuilder при таком объёме тормозит всё, но не спрашивать же здесть про оптимизацию базы? Вадя, так нельзя . Оказывается, у тебя даже нет ясного представления, о чем надо спрашивать, а о чем не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 17:39 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Если нет отягчающих обстоятельств в виде клиента, требующего Content-Length и не умеющего работать с Content-Range, то "построчное" чтение исходных данных и построчная же отправка "оформленного" результата клиенту - единственный адекватный вариант. И это не зависит от языка программирования, веб-серверов и клиентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 17:49 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
YamahaR1, вы ошибаетесь. я не на "форуме вообще", а в конкретном топике. разговариваю я здесь не с Вами и не с Blazkowicz. Когда завершить разговор - решу я самостоятельно или тот человек (вадя), поговорить с которым я решил в этом топике. Ваше считание глупым каких-то конкретных обстоятельств я принял к сведению. Кроме того, вы ошиблись - я нигде не сказал, что ява мне не нравится. Про яву головного мозга - говорил, про не нравится - нет. Но говорил про то, что слава богу , не имею к ней (java) отношения. PS Люди, которые в отличие от меня про яву знают, рассказали мне такую историю: На днях (в прошлый понедельник) любителями явы был устроен семинар, начавшийся с длинной лекции о пришивании левого уха к правому локтю, с указанием на техники заставить отрезанное ухо слышать после этого. На вопрос одного из слушателей - "При чем здесь ява?" Был дан ответ такого смысла, что программирование - дело креативное, и, мол, без креатива пороха не придумаешь. Так вот докладываю, что время для начала применения креатива в программировании наступает после оценки ситуации, в отличии от искусства, которое с креатива стартует для формирования мизансцены. Вы можете продолжать считать умным выдачу советов сорта "срочно преобразуй все в поток", но оставьте себе возможность хотя бы ошибиться в своей предварительной оценке ситуации. Со стороны это и глядеться умнее будет и на программирование станет немного больше похоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:03 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
авторВадя, так нельзя. Оказывается, у тебя даже нет ясного представления, о чем надо спрашивать, а о чем не надо. Я взял тормозной кусок проекта, выявил тормозные звенья , оценил стоимость оптмизации каждого звена, стоимость оптимизации совместных звеньев, стоимость переделки логики.. отсортировал в порядке возростания и оптимизация StringBuilder стоит в первых рядах с самой малой стоимостью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:07 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Глубокая философия на мелких местах - это да, это пять. "Это мы дадим в конце". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:10 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяавторВадя, так нельзя. Оказывается, у тебя даже нет ясного представления, о чем надо спрашивать, а о чем не надо. Я взял тормозной кусок проекта, выявил тормозные звенья , оценил стоимость оптмизации каждого звена, стоимость оптимизации совместных звеньев, стоимость переделки логики.. отсортировал в порядке возростания и оптимизация StringBuilder стоит в первых рядах с самой малой стоимостью. Значит, другого пути у тебя нет. Придется оптимизировать StringBuilder. Пока. Удачно пообщаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:27 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
boobyЗначит, другого пути у тебя нет. Придется оптимизировать StringBuilder. Какая глубокая мысль. Что же мы тут сами не доперли-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:33 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Хорошо бы еще пример оптимизации ))) где хотя бы 2-3 кратное ускорение можно выжать ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:34 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevХорошо бы еще пример оптимизации ))) где хотя бы 2-3 кратное ускорение можно выжать ))) про 2-3 кратное ускорение: судя по постам в других потоках и форумах - почти наверно в качестве источника данных у Вади используется Oracle. на ютубе есть кино от оракл, в котором утверждается буквально следующее: всякий, кто сел оптимизировать ява-код, в который "из базы приходит N записей в ResultSet", и не добился ускорения в 40000 (по буквам в сорок тысяч раз - 4 порядка с коэффициентом 4) - занялся не своим делом. Лучше бы посуду на кухне помыл, или пивные бутылки с окурками на мусорку вынес. Вадя, не знаю, что и как ты там сортировал, но оптимизация твоего кода должна начинаться с танцев вокруг setFetchSize. А вот продолжаться, в зависимости от проявленного креатива, может в любом понравившемся направлении. Посмотри это кино. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 18:54 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
вадяесть StringBuilder sf = new StringBuilder(250000); в цикле он заполняется примерно так sf.append("лялялялялялялял).append(String) .append(int) .append("d gdfgs fhs fghjsfgj fgjg hsdfh swfhwgfjhfjdfgjd ghjdgh") и т.д. длина sf может быть различна максимальная длина заполняется 50мс можно как-либо ускорить? форматный вывод пробовал ? (format) Может оказаться быстрее... А может и медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 20:09 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevвадя.... из базы приходит N записей в ResultSet Сомневаюсь, что в данном случае будет тормозить StringBuilder. У него наверное в профайлере дофига выполнений этого места кода, и из-за этого он считает, что это -- узкое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2015, 20:11 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
1. Если в строке StringBuilder sf = new StringBuilder(250000); число 250000 взято с потолка - надо его взять не с потолка, а сразу поставить достаточное для самого неблагоприятного случая, чтобы не было лишних grow-ов с копированиями. 2. использовать серверную jvm 3. по возможности, предпочитать делать мало крупных append-ов, и стараться не делать много мелких. и еще. Обычно StringBuilder используется для того чтобы потом создать строку. И не факт, что такие большие строки - это именно то что вам надо. Возможно, следует от этого уйти. Но это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер. Не 250кб - точно. Там скорей всего в цикле делается еще что-то, и тормозит не странгбилдер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 00:45 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
chabapokНо это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер. Или очень часто вызываться. Я не понял 50мс - это вызов одного append или все-таки сумарное время всех append? Если второе, но недавно игрался с небольшой утилиткой, так у меня там в итоге процентов 40% стало уходить на String.format, Number.format и прочее (какой-то format занимал 400мс из 2с). Утилита считывала 2Мб файл с числами и преобразовала в текст по хитрому алгоритму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 01:39 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
автор3. по возможности, предпочитать делать мало крупных append-ов, и стараться не делать много мелких. у меня в цикле 64 append число 250000 взято не с потолка - в конце стоит System.out.println("sf len " + sf.length()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 06:14 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
LeonidvchabapokНо это все имеет смысл, если тормозит именно стрингбилдер. 50мс - это, наверное, должен быть очень большой стрингбилдер. Или очень часто вызываться. Я не понял 50мс - это вызов одного append или все-таки сумарное время всех append? Если второе, но недавно игрался с небольшой утилиткой, так у меня там в итоге процентов 40% стало уходить на String.format, Number.format и прочее (какой-то format занимал 400мс из 2с). Утилита считывала 2Мб файл с числами и преобразовала в текст по хитрому алгоритму. Кстати тривиальный String::split(..), String::replaceAll(..) может внезапно вылезти боком. У нас на проекте их использовали для формирования Rest запроса но оказалось что стреляли из пушки по маленьким птичкам. Регекспы работают там где мы не ожидали их появления. Переписываем на апачевские имплементации тех-же split, replace. Чортов Гослинг. Старая задница. Так испортил фундаметнальный тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 07:57 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevTo All: а почему авторы JRE любят классы делать final? Нафига?Вроде там JVM если видит что класс не будет расширяться может применять свои оптимизации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:21 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Kenny FartmanВроде там JVM если видит что класс не будет расширяться может применять свои оптимизации Так как все публичные методы являются виртуальными, JVM для final классов может применить оптимизацию и заменить виртуальные вызовы на прямые, которые будут быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:31 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev... To All: а почему авторы JRE любят классы делать final? Нафига? final метод может быть заинлайнен JIT-ом. Не "вызов заменен на прямой", а вызов заменен на прямую подстановку тела final метода в точке его вызова. final - переменные играют роль immutable значений, безопасно используемых в качестве глобальных и автоматически видимых для inner-классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:56 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Сиськинfinal метод может быть заинлайнен JIT-ом. Не "вызов заменен на прямой", а вызов заменен на прямую подстановку тела final метода в точке его вызова. final - переменные играют роль immutable значений, безопасно используемых в качестве глобальных и автоматически видимых для inner-классов. Речь идёт о классах, а не методах и полях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:12 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Kenny FartmanLeonid KudryavtsevTo All: а почему авторы JRE любят классы делать final? Нафига?Вроде там JVM если видит что класс не будет расширяться может применять свои оптимизации Нет. Оптимизатор работает с загруженными классами, так что ему неважно, объявлен ли класс финальным, или нет. А по финальности- вопрос скорее в безопасности. По крайней мере так обстоит дело со String. А где ещё "любят делать"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:29 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Alexey TominНет. Оптимизатор работает с загруженными классами, так что ему неважно, объявлен ли класс финальным, или нет. https://wikis.oracle.com/display/HotSpotInternals/VirtualCalls an invokevirtual bytecode might in fact collapse into the equivalent of an invokestatic bytecode Alexey TominА по финальности- вопрос скорее в безопасности. По крайней мере так обстоит дело со String. А где ещё "любят делать"? Вероятно, речь о StringBuilder. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:46 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
Можно унаследоваться от AbstractStringBuilder. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:49 |
|
||
|
Ускорение StringBuilder
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominНет. Оптимизатор работает с загруженными классами, так что ему неважно, объявлен ли класс финальным, или нет. https://wikis.oracle.com/display/HotSpotInternals/VirtualCalls an invokevirtual bytecode might in fact collapse into the equivalent of an invokestatic bytecode О чём и речь- реально это будет, если метод перекрыт один раз, или не перекрыт вообще. Когда один раз- заменяется на if какой-то. Точно не помню, т.к. слышал на стенде у Шипилёва/Куксенко. BlazkowiczAlexey TominА по финальности- вопрос скорее в безопасности. По крайней мере так обстоит дело со String. А где ещё "любят делать"? Вероятно, речь о StringBuilder. Возможно речь тоже о безопасности. Либо о том, чтобы не думать о возможных наследниках (в вопросах совместимости). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 16:30 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2125503]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
91ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 536ms |

| 0 / 0 |
