HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #121  
Старый 07.02.2016, 01:15
Visor123
Постоянный
Регистрация: 22.06.2015
Сообщений: 766
С нами: 5732336

Репутация: 0


По умолчанию

О чем вы тут пишете? В цикле или 0 или 1 итерация.

Так же можете померять время итерации "a"+"b"

То есть к чему цикл в 100000 итераций? Попытка перевести тему в другую сторону - так опять же я дал самый правильный ответ, что для достижения максимальной скорости выполнения нужно писать на ассемблере - и это никто пока не смог опровергнуть.

Корону тут натягивают как раз все кому не лень, посмотрите свои ответы.

Цитата:
Сообщение от WoWan-SM  

Первый цикл ~52 секунды
Второй цикл ~ 4 милисекунды

Второй не сжирает, там нечему сжирать.
А вот первый сжирает овердохера с горочкой и если находиться в полной тишине, то можно услышать как скрипит GC

Ага, она не такая уж медленная, она п***ец какая медленная.

Как раз таки наоборот - сделает конфетку.

Не может, пару десятков или сотен мс.

Кто вам сказал про такой бред? Ни один хороший Java программист вам такого никогда не скажет.

Нужно

Нужно

Нужно

И да... getCommand(), если вы сами говорите может в процессе изменятся, то ведь пи***ц может начать твориться, код может в таких случаях либо не выполняться так как надо, либо вообще не выполнятся. Так что надо объявить её обязательно в начале.
Неправильный ответ ни для 0 ни для 1 итерации цикла, измерять нужно то что есть в задаче 1 поста, а не в выдуманном примере, который хочется измерять - там вообще-то все очевидно было еще до него.

getCommand() задается 1 раз при создании объекта.

Насчет добавить StringBuilder Для 0 итераций очень сильно ускорит и сделает конфетку?

Да и вообще у вас ответы противоречат - нельзя выбрать или быстрее или экономнее.

Самый экономный вариант памяти, который при создании объекта занимает минимальное кол-во памяти, другой вариант - это если переписать без конкатенций строк - этот вариант будет самый быстрый, быстрее чем любые StringBuilder. Это очевидно, странно что реальную оптимизацию не никто смог сделать - вы же писали столько слов .... и даже не смогли найти что оптимизировать ....

Почему никто не смог ничего придумать, кроме глупого цикла на 100000 итераций вместо 0-1 реальной итерации - померяйте что будет быстрее при 0-1 итерации предложенного примера - вы узнаете реальный ответ.


Цитата:
Сообщение от echipachenko  

В итоге, WoWan-SM и gattsu, доказали то что я писал пару постов назад.
Так что, дорогой visor, Вы не только пишите не оптимизированный, и не читаемый код, но еще и как человек - немного неадекватны.
Вам сделали 100 прямых замечаний, в Вы ищете миллион отмазок.
Смотрите что бы корона с Вашей головы не упала Король Визор123)
Вы опозорились больше всех в этой теме. Вместо того что бы признать свои ошибки - всякую чушь несёте.
Удачи Вам!
Доказали что при 0-1 итерации что? Я что-то не вижу доказательств.

Признать ошибку, что вы меряете то что и так очевидно? Я признаю, что я вижу очевидные ответы и их называю.

Чушь - это придумывать какие-то фантазийные сценарии - код в 1 посту где там 100000 итераций?

Цитата:
Сообщение от velafrys  

Не нужно судить по себе или по GenCloud, я не знаю по кому ещё.
Если уж речь идет про "обгадить", то целей таких не преследую. Мне кажется не очень-то похоже, что я в каких-то отношениях с GenCloud, будь то дружеские или партнерские, я же ноунейм, хех.
Старайтесь хладнокровно относиться ко всему, работа - есть работа, личные отношения - есть личные отношения. Вы рьяно начали защищать свой подход сломя голову, а я просто периодически захожу на этот форум, в режиме only-read, т.к. он выглядит приятнее, чем ЗГ. Когда-то в сентябре мне кинули ссылку на тред, а тут стало интересно, чего это профессионалы как дети уже 3 с лишним месяца обсуждают.

Кому я должен доказывать? Вам? А Вы беспристрастны и объективны? - Нет
Потому что речь идет о Вашемкоде, ошибок своих признавать Вы не умеете, хоть частично, пытаетесь навязать свои вкусы и подход (я на тему того, что конкатенация для Вас выглядит удобнее, нежели .append). Вам достаточно было ответить топик стартеру в подобном тоне и роде, и в этом случае тема была бы страниц на 6 меньше :

Я все сказал, удачи Вам в поддержке Вашего проекта.

Вы написали пример, который не отражает предметную область вопроса, о чем может быть обсуждение - это же очевидно. Удачи в фантазийном мире оптимизаций.
 
Ответить с цитированием

  #122  
Старый 07.02.2016, 01:32
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Цитата:
Сообщение от velafrys  

В scala, как я понимаю, все иначе?
Scala синтаксически мощнее язык. Но все же та же jvm.

Оптимизация дурное дело, просто как оптимизировать места которые ты не контролируешь, в этом и тупик.

Java(jvm) - как ракета с радиусом поражения. Стоит задача убить человека, Вам придется стрелять ракетой, убьете его, рядом стоящих, еще ближайшие строения в радиусе поражения, уничтожите. Хотя надо просто по тихому убрать.

Самая быстра программа возвращает сразу результат.

ПС я не пьющий человек.
 
Ответить с цитированием

  #123  
Старый 07.02.2016, 01:34
Visor123
Постоянный
Регистрация: 22.06.2015
Сообщений: 766
С нами: 5732336

Репутация: 0


По умолчанию

Получилось, один написал глупую тему, другие не смогли понять, что GenCloud не соображает ничего, потом еще один velafrys написал пример, не отражающий предмет вопроса, а потом все бросились отвечать на неправильный вопрос.

Что уж тут сказать, можете одеть короны.

Цитата:
Сообщение от gattsu  

Scala синтаксически мощнее язык. Но все же та же jvm.
Оптимизация дурное дело, просто как оптимизировать места которые ты не контролируешь, в этом и тупик.
Java(jvm) - как ракета с радиусом поражения. Стоит задача убить человека, Вам придется стрелять ракетой, убьете его, рядом стоящих, еще ближайшие строения в радиусе поражения, уничтожите. Хотя надо просто по тихому убрать.

Самая быстра программа возвращает сразу результат.
ПС я не пьющий человек.
Ты вроде не глупый, мог бы пояснить народу, что они вообще не о том говорят, что если нужно оптимизировать класс - нужно не StringBuilder добавить, а убрать конкатенции строк, насколько это возможно.
 
Ответить с цитированием

  #124  
Старый 07.02.2016, 01:53
GenCloud
Постоянный
Регистрация: 13.04.2015
Сообщений: 454
С нами: 5834308

Репутация: 2128
По умолчанию

Цитата:
Сообщение от Visor123  

Получилось, один написал глупую тему, другие не смогли понять, что GenCloud не соображает ничего, потом еще один velafrys написал пример, не отражающий предмет вопроса, а потом все бросились отвечать на неправильный вопрос.
Что уж тут сказать, можете одеть короны.
Все поняли что ты необразованное существо, не умеющее... даже не так - не научившееся еще делать выводы и нюхать правильно кокс.
 
Ответить с цитированием

  #125  
Старый 07.02.2016, 02:18
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Код:


[CODE]
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

Код:


Код:
protected void showMainPage(L2PcInstance player)
    {
        //NpcHtmlMessage adminReply = new NpcHtmlMessage(5);

        TextBuilder reply = new TextBuilder();
        reply
            .append("")
            .append(getName())
            .append("")
            .append("[ ")
            .append(getName())
            .append(" ]")
            .append("")
            .append("")
            .append("
Engine instances")
            .append("");
     
        for (L2EventGroupEngineInstance event : _eventInstances.values())
            reply.
                append("").
                append(event.getName()).
                append("").
                append("").
                append("").
                append("");
       
        reply
            .append("")
            .append("")
            .append("")
            .append("")
            .append("");
       
        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);
    }
 
Ответить с цитированием

  #126  
Старый 07.02.2016, 02:42
Visor123
Постоянный
Регистрация: 22.06.2015
Сообщений: 766
С нами: 5732336

Репутация: 0


По умолчанию

Цитата:
Сообщение от GenCloud  

Все поняли что ты необразованное существо, не умеющее... даже не так - не научившееся еще делать выводы и нюхать правильно кокс.
Дегенерат, не нужно делать вывод за других людей. Если ты не понимаешь элементарных вещей - то не значить что все вокруг такие же или глупее тебя.

Цитата:
Сообщение от gattsu  

Код:


Код:
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 ")
            .append(getName())
            .append("")
            .append("[ ")
            .append(getName())
            .append(" ]")
            .append("")
            .append("")
            .append("
Engine instances")
            .append("");
  
        for (L2EventGroupEngineInstance event : _eventInstances.values())
            reply.
                append("").
                append(event.getName()).
                append("").
                append("").
                append("").
                append("");
    
        reply
            .append("")
            .append("")
            .append("")
            .append("")
            .append("");
    
        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.
 
Ответить с цитированием

  #127  
Старый 07.02.2016, 02:51
velafrys
Участник форума
Регистрация: 03.02.2016
Сообщений: 148
С нами: 5407316

Репутация: 0
По умолчанию

Речь больше идет о Вашем подходе, а не о эффективности решения.

GenCloud ещё тот клоун, конечно, но вы друг друга стоите, господин Visor123, имхо.
 
Ответить с цитированием

  #128  
Старый 07.02.2016, 02:59
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Цитата:
Сообщение от Visor123  

Неправильный ответ, правильный ответ решить вопрос в частном порядке убрав общее решение, это позволит переложить время выполнения на время клонирования решения в частных имплементациях.

То есть, чтобы было понятно: этот класс перестанет существовать, и время его выполнения при любых вариантах будет равен 0.
.................. (спасибо администрации за смайлики)

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);
    }
 
Ответить с цитированием

  #129  
Старый 07.02.2016, 03:03
Visor123
Постоянный
Регистрация: 22.06.2015
Сообщений: 766
С нами: 5732336

Репутация: 0


По умолчанию

Я так понимаю, что вместо того, чтобы немножко подумать все решили, что класс не оптимизирован, потому что содержит конкатенции?

Начнем с того, что почему вы убрали за скобки задачу, стоимость выполнения, а так же стоимость вашего времени?

И второй немаловажный момент - не имплементация определяет задачу, а задача имплементацию.


Проблема всех умников, которые идут по пути оптимизации в том, что они не считают стоимость выполнения и стоимость своего времени. Так же не смотрят на задачу, а только на конечный вариант.

Простой пример - данный класс имеет общее решение задачи, но наиболее быстрым является частное решение задачи, но тогда в каждом частном решении будет клонирование решения этой общей задачи, но уже в более быстром варианте.

Посчитаем стоимость выполнения класса - класс управляет созданием, отображением странички, сохранением и редактированием движка групп-эвента.

Предположим что 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);
    }
Решение не должно содержать цикла, тогда оно будет максимально быстрым из простых. То есть ты просто не в том уровне ищешь решение.
 
Ответить с цитированием

  #130  
Старый 07.02.2016, 03:14
velafrys
Участник форума
Регистрация: 03.02.2016
Сообщений: 148
С нами: 5407316

Репутация: 0
По умолчанию

Жизни меня учить не нужно, хорошо?

Вы моей работы не видели, а я Вашу видел.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.