Можно ли оптимизировать
Здравствуйте, я начал более углублённо изучать BM и решил начать с типов. Изучал я их по примерам и некоторым статьям. Я хотел узнать, можно ли как-нибудь мою программку оптимизировать (вывод,обработку...). Заранее спасибо:) .
Код:
Const W=1920 |
Ответ: Можно ли оптимизировать
Что именно нужно оптимизировать? Или это оптимизация ради оптимизации? Вроде, нормально всё (внимательно не вычитывал, но выглядит как будто всё нормально, можно продолжать).
Какие конкретно части на твой взгляд работают неоптимально? |
Ответ: Можно ли оптимизировать
Спасибо за ответ. Я не утверждаю, что у меня в программе что-то не так, просто я только начал разбираться и вдруг есть более удобный (или более короткий) способ создания или отображения частиц (без всяких команд которые знают только супер профессионалы).
|
Ответ: Можно ли оптимизировать
Предварительно создать максимальное кол-во частиц и оперировать готовыми сущностями?
|
Ответ: Можно ли оптимизировать
Спасибо за идею
|
Re: Можно ли оптимизировать
1. Для лучшей наглядности надо перенести Global LSparks:TList=CreateList() в тип:
Type TSpark Global LSparks:TList = CreateList() ... 2. Если ВМ не форкнутый, то в нем косяк с наследованием функций типов и если ты в дальнейшем будешь наследоваться от TSpark, то с Function Create будут проблемы с другим типом аргументов и другим возвращаемым значением. Солюшны: а) фиксить ВМ (он же в исходниках теперь) б) вынести функцию за тип в глобальное пространство имен и назвать как-то CreateTSpark в) не наследоваться или не использовать в наследниках переопределение функции Create г) флоу-подход типа: new TSpark().initSpark(...) - т.е. заменить функцию Create на методы. д) сделать все на общих типах Object с последующим явным приведением к нужному типу: function create:Object( arguments:Object ) 3. Как правило функции и методы для создания инициализации возвращают значение экземпляра, а не ничего. Хорошо бы добавить в конец Create такое действие: return Spark, предварительно, конечно немного изменив ее описание на Function Create:TSpark(x,y,r,g,b) 4. Удалять из списка по значению (как у тебя LSparks.remove(Self) ) - долгая операция, чем больше список, тем дольше. Пользуйся классом TLink в котором и хранится и само значение и ссылки на другие линки. Добавляем в тип поле link:TLink. Значение получаем в операции добавления значения в список: link = LSparks.Addlast(Spark) Удалять, соответсвенно вместо LSparks.remove(Self) - пишем: link.remove() 5. Еще по наглядности и удобности советую все поля вынести по отдельным строкам Field x# Field y# ... field link:TLink Для а) Добавления комментариев по назначению полей б) для убирания(навсегда или щадяще - комментированием)/добавления ненужных/новых полей 6. Вместо отдельного вызова sin и cos можно вызывать совместный sincos - это быстрее раза в 2 или больше - т.к. для каждого вызова используется загрузка регистров сопра, ожидание его ответа. Один раз это сделать быстрее чем два. Модуль можно написать самому или взять бесплатно и без регистрации :) здесь http://blitzmax.3dn.ru/load/11-1-0-10 7. И если уж совсем заморачиваться, то для рандома можно свое что-то заюзать на xor-ах есть быстрые алгоритмы псевдорандомов. 8. Использовать пул для TSpark. Для этого очень хорошо подходит уже имеющаяся функция Create, только сам пул добавить. Но пулы надо юзать очень осторожно. Как-то так. По безгиморной оптимизации на чистом ВМ только п.4 и присодиняюсь к Randomize - предварительный кеш объектов не помешает - можно добавить для этого метод/функцию. Пожалуйста. |
Часовой пояс GMT +4, время: 07:52. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot