Неправильный ответ ни для 0 ни для 1 итерации цикла, измерять нужно то что есть в задаче 1 поста, а не в выдуманном примере, который хочется измерять - там вообще-то все очевидно было еще до него.Первый цикл ~52 секунды
Второй цикл ~ 4 милисекунды
Второй не сжирает, там нечему сжирать.
А вот первый сжирает овердохера с горочкой и если находиться в полной тишине, то можно услышать как скрипит GC
Ага, она не такая уж медленная, она п***ец какая медленная.
Как раз таки наоборот - сделает конфетку.
Не может, пару десятков или сотен мс.
Кто вам сказал про такой бред? Ни один хороший Java программист вам такого никогда не скажет.
Нужно
Нужно
Нужно
И да... getCommand(), если вы сами говорите может в процессе изменятся, то ведь пи***ц может начать твориться, код может в таких случаях либо не выполняться так как надо, либо вообще не выполнятся. Так что надо объявить её обязательно в начале.
Доказали что при 0-1 итерации что? Я что-то не вижу доказательств.В итоге, WoWan-SM и gattsu, доказали то что я писал пару постов назад.
Так что, дорогой visor, Вы не только пишите не оптимизированный, и не читаемый код, но еще и как человек - немного неадекватны.
Вам сделали 100 прямых замечаний, в Вы ищете миллион отмазок.
Смотрите что бы корона с Вашей головы не упалаКороль Визор123)
Вы опозорились больше всех в этой теме. Вместо того что бы признать свои ошибки - всякую чушь несёте.
Удачи Вам!
Вы написали пример, который не отражает предметную область вопроса, о чем может быть обсуждение - это же очевидно. Удачи в фантазийном мире оптимизаций.Не нужно судить по себе или по GenCloud, я не знаю по кому ещё.
Если уж речь идет про "обгадить", то целей таких не преследую. Мне кажется не очень-то похоже, что я в каких-то отношениях с GenCloud, будь то дружеские или партнерские, я же ноунейм, хех.
Старайтесь хладнокровно относиться ко всему, работа - есть работа, личные отношения - есть личные отношения. Вы рьяно начали защищать свой подход сломя голову, а я просто периодически захожу на этот форум, в режиме only-read, т.к. он выглядит приятнее, чем ЗГ. Когда-то в сентябре мне кинули ссылку на тред, а тут стало интересно, чего это профессионалы как дети уже 3 с лишним месяца обсуждают.
Кому я должен доказывать? Вам? А Вы беспристрастны и объективны? - Нет
Потому что речь идет о Вашем коде, ошибок своих признавать Вы не умеете, хоть частично, пытаетесь навязать свои вкусы и подход (я на тему того, что конкатенация для Вас выглядит удобнее, нежели .append). Вам достаточно было ответить топик стартеру в подобном тоне и роде, и в этом случае тема была бы страниц на 6 меньше :
Я все сказал, удачи Вам в поддержке Вашего проекта.
Scala синтаксически мощнее язык. Но все же та же jvm.В scala, как я понимаю, все иначе?
Ты вроде не глупый, мог бы пояснить народу, что они вообще не о том говорят, что если нужно оптимизировать класс - нужно не StringBuilder добавить, а убрать конкатенции строк, насколько это возможно.Scala синтаксически мощнее язык. Но все же та же jvm.
Оптимизация дурное дело, просто как оптимизировать места которые ты не контролируешь, в этом и тупик.
Java(jvm) - как ракета с радиусом поражения. Стоит задача убить человека, Вам придется стрелять ракетой, убьете его, рядом стоящих, еще ближайшие строения в радиусе поражения, уничтожите. Хотя надо просто по тихому убрать.
Самая быстра программа возвращает сразу результат.
ПС я не пьющий человек.
Все поняли что ты необразованное существо, не умеющее... даже не так - не научившееся еще делать выводы и нюхать правильно кокс.Получилось, один написал глупую тему, другие не смогли понять, что GenCloud не соображает ничего, потом еще один velafrys написал пример, не отражающий предмет вопроса, а потом все бросились отвечать на неправильный вопрос.
Что уж тут сказать, можете одеть короны.
package actor;
public class TextBuilder {
class Entry {
String value;
Entry next;
Entry(String value) {
this.value = value;
this.next = null;
}
}
int size = 0;
Entry head;
Entry tail;
public TextBuilder() { }
public TextBuilder append(Object value) {
return append(value.toString());
}
public TextBuilder append(String value) {
size += value.length();
if(head == null)
head = tail = new Entry(value);
else
tail = (tail.next = new Entry(value));
return this;
}
public String toString() {
char[] chars = new char[size];
int offset = 0;
for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next)
for(int i = 0 ; i < target.value.length() ; i++)
chars[offset + i] = target.value.charAt(i);
return new String(chars);
}
public static void main(String...arsg) {
TextBuilder text = new TextBuilder();
for(int i = 0 ; i < 100000 ; i++)
text.append(i);
text.toString();
}
}
protected void showMainPage(L2PcInstance player)
{
//NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
TextBuilder reply = new TextBuilder();
reply
.append("<html><title>")
.append(getName())
.append("</title><body>")
.append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ")
.append(getName())
.append(" ]</font></td>")
.append("<td><button value=\"Back\" action=\"bypass -h ")
.append("admin_events")
.append("\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>")
.append("</tr></table>")
.append("<br><center>Engine instances</center>")
.append("<table width=\"292\">");
for (L2EventGroupEngineInstance event : _eventInstances.values())
reply.
append("<tr><td><font color=\"LEVEL\">").
append(event.getName()).
append("</font></td>").
append("<td><button value=\"Show\" action=\"bypass -h ").
append(getCommand()).
append("_show ").
append(event.getName()).
append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").
append("<td><button value=\"Edit\" action=\"bypass -h ").
append(getCommand()).
append("_edit ").
append(event.getName()).
append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").
append("<td><button value=\"Delete\" action=\"bypass -h ").
append(getCommand()).
append("_del ").
append(event.getName()).
append(" $name").
append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
reply
.append("</table>")
.append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>")
.append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ")
.append(getCommand())
.append("_create $name")
.append("\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>")
.append("</table>")
.append("</body></html>");
adminReply.setHtml(replyMSG.toString());
player.sendPacket(adminReply);
// Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
player.sendPacket(ActionFailed.STATIC_PACKET);
}
Дегенерат, не нужно делать вывод за других людей. Если ты не понимаешь элементарных вещей - то не значить что все вокруг такие же или глупее тебя.Все поняли что ты необразованное существо, не умеющее... даже не так - не научившееся еще делать выводы и нюхать правильно кокс.
Неправильный ответ, правильный ответ решить вопрос в частном порядке убрав общее решение, это позволит переложить время выполнения на время клонирования решения в частных имплементациях.Код:package actor; public class TextBuilder { class Entry { String value; Entry next; Entry(String value) { this.value = value; this.next = null; } } int size = 0; Entry head; Entry tail; public TextBuilder() { } public TextBuilder append(Object value) { return append(value.toString()); } public TextBuilder append(String value) { size += value.length(); if(head == null) head = tail = new Entry(value); else tail = (tail.next = new Entry(value)); return this; } public String toString() { char[] chars = new char[size]; int offset = 0; for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next) for(int i = 0 ; i < target.value.length() ; i++) chars[offset + i] = target.value.charAt(i); return new String(chars); } public static void main(String...arsg) { TextBuilder text = new TextBuilder(); for(int i = 0 ; i < 100000 ; i++) text.append(i); text.toString(); } }
Код:protected void showMainPage(L2PcInstance player) { //NpcHtmlMessage adminReply = new NpcHtmlMessage(5); TextBuilder reply = new TextBuilder(); reply .append("<html><title>") .append(getName()) .append("</title><body>") .append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ") .append(getName()) .append(" ]</font></td>") .append("<td><button value=\"Back\" action=\"bypass -h ") .append("admin_events") .append("\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>") .append("</tr></table>") .append("<br><center>Engine instances</center>") .append("<table width=\"292\">"); for (L2EventGroupEngineInstance event : _eventInstances.values()) reply. append("<tr><td><font color=\"LEVEL\">"). append(event.getName()). append("</font></td>"). append("<td><button value=\"Show\" action=\"bypass -h "). append(getCommand()). append("_show "). append(event.getName()). append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"). append("<td><button value=\"Edit\" action=\"bypass -h "). append(getCommand()). append("_edit "). append(event.getName()). append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"). append("<td><button value=\"Delete\" action=\"bypass -h "). append(getCommand()). append("_del "). append(event.getName()). append(" $name"). append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); reply .append("</table>") .append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>") .append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ") .append(getCommand()) .append("_create $name") .append("\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>") .append("</table>") .append("</body></html>"); adminReply.setHtml(replyMSG.toString()); player.sendPacket(adminReply); // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); }
..................Неправильный ответ, правильный ответ решить вопрос в частном порядке убрав общее решение, это позволит переложить время выполнения на время клонирования решения в частных имплементациях.
То есть, чтобы было понятно: этот класс перестанет существовать, и время его выполнения при любых вариантах будет равен 0.
public class TextBuilder {
class Entry {
String value;
Entry next;
Entry(String value) {
this.value = value;
this.next = null;
}
}
int size = 0;
Entry head;
Entry tail;
public TextBuilder() { }
public TextBuilder append(String value) {
size += value.length();
if(head == null)
head = tail = new Entry(value);
else
tail = (tail.next = new Entry(value));
return this;
}
public TextBuilder append(Object...value) {
int i = 0;
if(head == null && value.length > 0) {
String str = value[0].toString();
size += str.length();
head = tail = new Entry(str);
i++;
}
for(; i < value.length ; i++) {
String str = value[i].toString();
size += str.length();
tail = (tail.next = new Entry(str));
}
return this;
}
public String toString() {
char[] chars = new char[size];
int offset = 0;
for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next)
for(int i = 0 ; i < target.value.length() ; i++)
chars[offset + i] = target.value.charAt(i);
return new String(chars);
}
}
protected void showMainPage(L2PcInstance player)
{
NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
TextBuilder reply = new TextBuilder();
reply
.append(
"<html><title>",
getName(),
"</title><body>",
"<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ",
getName(),
" ]</font></td>",
"<td><button value=\"Back\" action=\"bypass -h ",
"admin_events",
"\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>",
"</tr></table>",
"<br><center>Engine instances</center>",
"<table width=\"292\">"
);
for (L2EventGroupEngineInstance event : _eventInstances.values())
reply
.append(
"<tr><td><font color=\"LEVEL\">",
event.getName(),
"</font></td>",
"<td><button value=\"Show\" action=\"bypass -h ",
getCommand(),
"_show ",
event.getName(),
"\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>",
"<td><button value=\"Edit\" action=\"bypass -h ",
getCommand(),
"_edit ",
event.getName(),
"\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>",
"<td><button value=\"Delete\" action=\"bypass -h ",
getCommand(),
"_del ",
event.getName(),
" $name",
"\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"
);
reply
.append(
"</table>",
"<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>",
"<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ",
getCommand(),
"_create $name",
"\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>",
"</table>",
"</body></html>"
);
adminReply.setHtml(reply.toString());
player.sendPacket(adminReply);
// Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
player.sendPacket(ActionFailed.STATIC_PACKET);
}
Не нужно меня подсовывать к GenCloud - одно из отличительных свойств в том, что я не вру.Речь больше идет о Вашем подходе, а не о эффективности решения.
GenCloud ещё тот клоун, конечно, но вы друг друга стоите, господин Visor123, имхо.
Решение не должно содержать цикла, тогда оно будет максимально быстрым из простых. То есть ты просто не в том уровне ищешь решение...................(спасибо администрации за смайлики)
version 0.1
delete method append(Object);
add new method append(Object...)
Код:public class TextBuilder { class Entry { String value; Entry next; Entry(String value) { this.value = value; this.next = null; } } int size = 0; Entry head; Entry tail; public TextBuilder() { } public TextBuilder append(String value) { size += value.length(); if(head == null) head = tail = new Entry(value); else tail = (tail.next = new Entry(value)); return this; } public TextBuilder append(Object...value) { int i = 0; if(head == null && value.length > 0) { String str = value[0].toString(); size += str.length(); head = tail = new Entry(str); i++; } for(; i < value.length ; i++) { String str = value[i].toString(); size += str.length(); tail = (tail.next = new Entry(str)); } return this; } public String toString() { char[] chars = new char[size]; int offset = 0; for(Entry target = head ; target != null ; offset += target.value.length(), target = target.next) for(int i = 0 ; i < target.value.length() ; i++) chars[offset + i] = target.value.charAt(i); return new String(chars); } }
Код:protected void showMainPage(L2PcInstance player) { NpcHtmlMessage adminReply = new NpcHtmlMessage(5); TextBuilder reply = new TextBuilder(); reply .append( "<html><title>", getName(), "</title><body>", "<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ ", getName(), " ]</font></td>", "<td><button value=\"Back\" action=\"bypass -h ", "admin_events", "\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>", "</tr></table>", "<br><center>Engine instances</center>", "<table width=\"292\">" ); for (L2EventGroupEngineInstance event : _eventInstances.values()) reply .append( "<tr><td><font color=\"LEVEL\">", event.getName(), "</font></td>", "<td><button value=\"Show\" action=\"bypass -h ", getCommand(), "_show ", event.getName(), "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>", "<td><button value=\"Edit\" action=\"bypass -h ", getCommand(), "_edit ", event.getName(), "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>", "<td><button value=\"Delete\" action=\"bypass -h ", getCommand(), "_del ", event.getName(), " $name", "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>" ); reply .append( "</table>", "<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>", "<td><button value=\""+"Create New Event"+"\" action=\"bypass -h ", getCommand(), "_create $name", "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>", "</table>", "</body></html>" ); adminReply.setHtml(reply.toString()); player.sendPacket(adminReply); // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); }
Вообще-то можешь узнать у любого заказчика, что ему важно. Для этого я не нужен.Жизни меня учить не нужно, хорошо?
Вы моей работы не видели, а я Вашу видел.
"Программа не должна содержать кода"Решение не должно содержать цикла, тогда оно будет максимально быстрым из простых. То есть ты просто не в том уровне ищешь решение.
Вообще-то можешь узнать у любого заказчика, что ему важно. Для этого я не нужен.
То что ты не считаешь эффективность решения фактором в решении задачи - то это не значит, что я учу тебя жизни - жизнь сама тебя научит.
Я тут никого не обманул - я сразу дал правильные ответы, и сейчас после долгих намеков дал готовые решения. Не нужно на меня за это обижаться, потому что ты не был готов к реальной оптимизации, но не в 1 плоскости, а в объеме вопроса с большим кол-вом факторов и с учетом собственно самой задачи.
Так я и не ухожу, в случае частного решения задачи этого класса не будет вообще, а задача будет решена без цикла и без конкатенций в методе с командами."Программа не должна содержать кода"
Я тут с вами не играю в абстрактный код.
Потом давайте не уходить в гипотетические условности, типа: ассемблер, код, быстрее. Набор слов и только.
Вы с начало свой код в соответствие своим словам приведите, а то диссонанс возникает, говорите одно, а на деле другое. Уровень студента, второго курса, лабораторная работа по программирование. В продакшн такой код не пустят, по рукам бить будут нормальные люди.
ПС я тут просто развлекаюсь
Опять неправильный вопрос и неправильный ответ. Правильное решение зависит не от твоей точки зрения, а от эффективности решения задачи.Для Вас все Ваши ответы - правильные. Таковы правила всех самовлюбленных людей, вне зависимости от их рода деятельности.
Мое правило простое - видишь не инлайновую конкатенацию? Это говнокод.
Почитайте на досуге, кстати, того же Макконнелла, как минимум.
Повторюсь - неправильные с Вашей точки зрения.Не нужно меня винить, в том, что вы задали себе неправильные вопросы и получили неправильные ответы.
Вы почитайте лучше вот этот бред, нашелся литературный критик "Но с точки зрения написания" - это он про код так пишет. GenCloud ты с точки зрения буквы смотришь или их жопы? Где твоя точка зрения?С точки зрения ява-машины - ничего страшного, но нужно было оставить вторую проверку - выполнение кода не пошло бы хоть так, хоть эдак, никаких потерь по времени
Но с точки зрения написания - ***ец
Чет герычем попахивает, мдам.......
command.substring(getCommand().length()+5); еще меня особенно умиляет)
Берем строку, режем ее, вычленяем остаток - вуаля, команда!
Что ты несешь - посмотри, что конкретно ты привел в примере - цикл с 100000 итерациями - я у тебя что спросил - где ты нашел в коде цикл где может быть 100000 итераций? Ты что написал - единственный цикл - но там не с моей точки зрения, а объективно 0-1 итераций может быть. То есть фантасты не смогут этого типа эвента значительно больше пары-тройки для л2 придумать.Повторюсь - неправильные с Вашей точки зрения.
ноууууууууу, что мне читать тогдаОффтоп:Вангую пора вмешаться.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?