Хорошо! Хорошо!:  0
Плохо! Плохо!:  0
Показано с 1 по 5 из 5

Тема: Оптимизация и скорость

  1. #1
    Бывалый Аватар для Dark32
    Информация о пользователе
    Регистрация
    30.12.2008
    Адрес
    Арзамас
    Сообщений
    640
    Записей в дневнике
    2
    Репутация: 20 Добавить или отнять репутацию

    Вопрос Оптимизация и скорость

    Вечный вопрос что лучше: краткость кода или скорость его работы или читабельность.

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

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



    Чтобы не быть голословным представляю вам на суд мои тесты некоторых операторов


    PHP код:
    for i in 1...10_000_000
    end 
    1.203с

    PHP код:
    (1..10_000_000).each {} 
    0.969с

    PHP код:
    for i in 1...10_000_000
      u
    =1
    end 
    2.516с

    PHP код:
    (1..10_000_000).each {|iu=1
    4.094с

    PHP код:
    (1..10_000_000).each {|ia[i]=i
    5.407с

    PHP код:
    for i in 1...10_000_000
      a
    [i]=i
    end 
    4.765 с


    P.S.: если это действительно актуально, буду проводить тесты дальше, если же нет, что скорее всего, то подожду лучших времён
    Последний раз редактировалось Dark32; 03.02.2010 в 19:33.
    Нужна помощь в скриптах? Запутался? Голова не варит?
    Читал это и это тоже? Не помогло? Тогда тебе сюда!
    Спойлер •••:
    Цитата Сообщение от Реймон
    В мире нет вещей которые нельзя решить с помощью сладостей
    Цитата Сообщение от Ундер
    Ночью можно обойтись и без сладостей...

  2. #2

    По умолчанию

    Интересные результаты. Меня как раз сейчас привлекает эта тема.
    А как замерялось время?

  3. #3
    Бывалый Аватар для Dark32
    Информация о пользователе
    Регистрация
    30.12.2008
    Адрес
    Арзамас
    Сообщений
    640
    Записей в дневнике
    2
    Репутация: 20 Добавить или отнять репутацию

    По умолчанию

    PHP код:
    t1=Time.now
     
    <тут код>
    t2=Time.now
    t
    =(t2-t1)
    p t 
    При измерение врени одного оператора будет 0, малая точность класса Time. Поетому приходится использовать цикл порядка 1млн - 10млн кругов.
    Сейчас ищу более точный метод измерения
    Нашёл GetTickCount, но он толи сишный, толи WinAPI
    Последний раз редактировалось Dark32; 03.02.2010 в 20:43.
    Нужна помощь в скриптах? Запутался? Голова не варит?
    Читал это и это тоже? Не помогло? Тогда тебе сюда!
    Спойлер •••:
    Цитата Сообщение от Реймон
    В мире нет вещей которые нельзя решить с помощью сладостей
    Цитата Сообщение от Ундер
    Ночью можно обойтись и без сладостей...

  4. #4

    По умолчанию

    Вряд ли есть ещё какие способы, но это направление мне интересно.
    Пара замечаний:
    1) Диапазоны в примерах разные: ... и ..
    во втором случае будет на одно исполнение кода больше
    2) Код уже можно сократить
    Код:
    t1=Time.now 
     <тут код> 
    p Time.now-t1
    Не обязательно бросаться с головой в оптимизацию, но лично мне интересны твои исследования.

  5. #5
    Бывалый Аватар для Dark32
    Информация о пользователе
    Регистрация
    30.12.2008
    Адрес
    Арзамас
    Сообщений
    640
    Записей в дневнике
    2
    Репутация: 20 Добавить или отнять репутацию

    По умолчанию

    PHP код:
    a=123
     
    for i in 1...10_000_000
       u
    =a
     end 
    2,414

    PHP код:
    for i in 1...10_000_000
       u
    =123
     end 
    2,329

    PHP код:
    A=123
     
    for i in 1...10_000_000
       u
    =A
     end 
    3,232

    PHP код:
    $a=123
     
    for i in 1...10_000_000
       u
    =$a
     end 
    2,703

    PHP код:
    aaaaaaaaaaaaaaaaaaaaaaaaaaaa=123
     
    for i in 1...10_000_000
      u
    =aaaaaaaaaaaaaaaaaaaaaaaaaaaa
     end 
    2.344

    PHP код:
     for i in 1...10_000_000
      u
    =2*2
     end 
    4.359

    PHP код:
     for i in 1...10_000_000
      u
    =2.0*2
     end 
    4.765

    PHP код:
    for i in 1...10_000_000
      u
    =2.0*2.0
    end 
    4.859

    PHP код:
    def test
    end  

     
    for i in 1...10_000_000
      test
     end 
    3,656

    PHP код:
    def test
      
    return 123
    end  

     
    for i in 1...10_000_000
      u
    =test
     end 
    5,828

    Заметил одну странность обращение к константе (переменная с большой буквы) медленней чем обращение к глобальной переменной
    Нужна помощь в скриптах? Запутался? Голова не варит?
    Читал это и это тоже? Не помогло? Тогда тебе сюда!
    Спойлер •••:
    Цитата Сообщение от Реймон
    В мире нет вещей которые нельзя решить с помощью сладостей
    Цитата Сообщение от Ундер
    Ночью можно обойтись и без сладостей...

Информация о теме

Пользователи, просматривающие эту тему

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

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •