Я так понимаю, что вместо того, чтобы немножко подумать все решили, что класс не оптимизирован, потому что содержит конкатенции?
Начнем с того, что почему вы убрали за скобки задачу, стоимость выполнения, а так же стоимость вашего времени?
И второй немаловажный момент - не имплементация определяет задачу, а задача имплементацию.
Проблема всех умников, которые идут по пути оптимизации в том, что они не считают стоимость выполнения и стоимость своего времени. Так же не смотрят на задачу, а только на конечный вариант.
Простой пример - данный класс имеет общее решение задачи, но наиболее быстрым является частное решение задачи, но тогда в каждом частном решении будет клонирование решения этой общей задачи, но уже в более быстром варианте.
Посчитаем стоимость выполнения класса - класс управляет созданием, отображением странички, сохранением и редактированием движка групп-эвента.
Предположим что 2 метода каждый по 1 вызову займут макс 0,5мс. За полгода добавлять движок эвента может понадобится максимум раза 2, создать + написать имя, сохранить. Это пара операций, и больше отображений. Я считаю, что потеря 100мс выполнения за пол года не критично для сервера.
Класс не содержит рекурсий и блокировок и не может вызвать лаг сервера - значить время его выполнения можно считать чистым.
Теперь мое время - при имплементации задач в виде частных случаев общее решение этого класса будет клонировано на частные решения - что потянет мое время как минимум замены имен в частных строках команд, далее частные решения будут забирать время фокусировки внимания и понимания того, что решение не оптимально с позиции логики решения несколько раз одинаковых задач.
То есть стоимость в 100мс за пол года стоит общего решения задачи и экономит кучу моего времени. Логика решения общих вопросов отделена от частных случаев и оптимизирована для редкого использования и 0-1 итераций.
Вопрос решен.
Сообщение от
velafrys
Речь больше идет о Вашем подходе, а не о эффективности решения.
GenCloud ещё тот клоун, конечно, но вы друг друга стоите, господин Visor123, имхо.
Не нужно меня подсовывать к GenCloud - одно из отличительных свойств в том, что я не вру.
Всегда важно эффективность решения, а не подход.
Подход - это набор инструментов/скилов по сути, а эффективность работы - это результат - людям нужен результат.
Пока вы не поймете таких простых вещей, вы будете задавать неправильные вопросы и иметь неправильные ответы.
Сообщение от
gattsu
.................. (спасибо администрации за смайлики)
version 0.1
delete method append(Object);
add new method append(Object...)
Сообщение от
Спойлер
Код:
[CODE]
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
Код:
Код:
protected void showMainPage(L2PcInstance player)
{
NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
TextBuilder reply = new TextBuilder();
reply
.append(
"",
getName(),
"",
"[ ",
getName(),
" ]",
"",
"",
"
Engine instances",
""
);
for (L2EventGroupEngineInstance event : _eventInstances.values())
reply
.append(
"",
event.getName(),
"",
"",
"",
""
);
reply
.append(
"",
"",
"",
"",
""
);
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);
}
Решение не должно содержать цикла, тогда оно будет максимально быстрым из простых. То есть ты просто не в том уровне ищешь решение.