Как лучше организовать работу с переменными

Оптимизация кода.

Как лучше организовать работу с переменными

Сообщение DimeX 03 фев 2016, 22:18

Всем привет.

Заранее прошу прощения, уверен, вопрос скудный. Я пытаюсь поискать информацию в интернете, но видно не знаю как правильно составить вопрос.

Ситуация такова, хочу понять, какой вариант был бы лучше:

Вариант 1 (использовать целые/с плавающей запятой значения)
Синтаксис:
Используется csharp
void InvokeBoatGo ()
        {
                transform.position -= transform.right * 0.05f;
                player.transform.position -= transform.right * 0.05f;
        }
public void setMis()
        {
                InvokeRepeating ("InvokeBoatGo", 0.0f, 0.03f);
                level_1_boat_coll.setMis ();
        }
 


Вариант 2 (использовать объявленные переменные для них)
Синтаксис:
Используется csharp
void InvokeBoatGo ()
        {
                transform.position -= transform.right * moveSpeed;
                player.transform.position -= transform.right * moveSpeed;
        }
public void setMis()
        {
                InvokeRepeating ("InvokeBoatGo", startTIme, repeatTime);
                level_1_boat_coll.setMis ();
        }
 


Просто мне интересно, если мы используем вариант №1, то получается при каждом вызове в память будет записываться float число, которое со временем сотрется сборщиком мусора? Получается, второй вариант будет лучше?

Поправьте пожалуйста меня, если я не прав.
Аватара пользователя
DimeX
UNIт
 
Сообщения: 63
Зарегистрирован: 28 май 2015, 22:23
Откуда: Беларусь
Skype: DimeX-By

Re: Как лучше организовать работу с переменными

Сообщение DbIMok 03 фев 2016, 22:23

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.6k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как лучше организовать работу с переменными

Сообщение waruiyume 03 фев 2016, 22:54

Без разницы, в первом варианте создаются константы.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как лучше организовать работу с переменными

Сообщение DimeX 03 фев 2016, 22:58

DbIMok писал(а):http://docs.unity3d.com/ru/current/Manual/UnderstandingAutomaticMemoryManagement.html

Спасибо, познавательно!
waruiyume писал(а):Без разницы, в первом варианте создаются константы.

Т.е. в первом случае создадутся 4 константы (0.05f, 0.05f, 0.0f, 0.03f). Во втором случае можно было бы сократить до трех (0.05f = x; 0.0f = y; 0.03f = z)
Верно?
Аватара пользователя
DimeX
UNIт
 
Сообщения: 63
Зарегистрирован: 28 май 2015, 22:23
Откуда: Беларусь
Skype: DimeX-By

Re: Как лучше организовать работу с переменными

Сообщение Paul Siberdt 03 фев 2016, 23:46

Лучше создайте для себя же эти самые константы и разместите в удобном месте.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как лучше организовать работу с переменными

Сообщение seaman 04 фев 2016, 00:31

Без разницы, в первом варианте создаются константы.

Констант не создается. Числа прямо будут внутри MSIL кода.
Разница есть - в первом случае числа будут прямо внутри MSIL кода, во втором случае они сначала получаются из переменных. По времени разница, конечно невелика, но она есть.
Какой вариант выбрать зависит от того - переменные это значения или константы. Если по мере исполнения значения их меняются - конечно нужно использовать переменные. Если же значения постоянны - лучше, как написал Paul Siberdt определить константы с этими значениями и использовать их.
Синтаксис:
Используется csharp
public const float SPEED = 0.5f;

void InvokeBoatGo ()
        {
                transform.position -= transform.right * SPEED;
                player.transform.position -= transform.right * SPEED ;

Обратите внимание, что константами могут быть только примитивные типы. Для остальных (например вектор) есть зарезервированное слово readonly. Оно указывает, что значение такой переменной задается один раз при создании экземпляра класса и больше не меняется. Используется (может использоваться) компилятором для оптимизаций.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как лучше организовать работу с переменными

Сообщение DimeX 04 фев 2016, 07:09

Спасибо за развернутые ответы. Я как-то не подумал, стоит перелопатить весь код, ведь я совсем нигде не использовал константу.
Аватара пользователя
DimeX
UNIт
 
Сообщения: 63
Зарегистрирован: 28 май 2015, 22:23
Откуда: Беларусь
Skype: DimeX-By

Re: Как лучше организовать работу с переменными

Сообщение waruiyume 04 фев 2016, 07:36

Советую упырить мел, и не чинить, то, что не ломалось) Лучше, когда будите писать в следующий раз, там, где наверняка будет меняться значение, используйте переменную, тогда её можно будет крутить в инспекторе; в тех местах, где меняться не будет, и можно дать осмысленное имя, используйте константы. Главное не впадать в маразм- константы: ДВА и ПОЛОВИНА, используемые в формулах- ничего не дадут.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как лучше организовать работу с переменными

Сообщение Paul Siberdt 04 фев 2016, 13:50

Хе-хе... а у меня есть константы FIRST и SECOND. Пользовал для массива касаний вместо индексов 0 и 1. По ним проще было читать код и быстрее прыгать по точкам использования, правда, чичас уже предпочитаю ссылки FirstTouch и SecondTouch непосредственно на элементы массива touches. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как лучше организовать работу с переменными

Сообщение artk 05 фев 2016, 04:33

Совет - не думайте об такой оптимизации вообще. Оптимизировать нужно самый узкие места.
Самое главное в коде - это читаемость и расширяемость.
Возьмите любой codestyle для C# и используйте его. В них в обязательном порядке будет написано, что нельзя использовать "магические числа" в коде, все нужно выносить в константы. В некоторых даже запрещено использовать строковые значения.
Почитайте «Чистый код»
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: Как лучше организовать работу с переменными

Сообщение waruiyume 05 фев 2016, 05:51

Только именованные константы- только хардкор \m/

Сумма арифметической прогрессии
((2a₁+d(n-1))/2)n

((2*a+d*(n-1))/2)*n

((2*firstIndex+step*(cout-1))/2)*count

((DOUBLE*firstIndex+step*(count-ONE))/TWO)*count
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как лучше организовать работу с переменными

Сообщение DimeX 05 фев 2016, 21:34

Благодарю, думаю да, стоит когда-то взяться за чистый код (подразумеваю книгу).

Вообще, по оптимизации, буквально неделю назад поменял очень много скриптов, т.к. после часовой игры резко начал падать фпс. Заметил, что я для вращения игрока в update постоянно создаю new Vector 3, понял, что видимо это гиблое дело. Убрал, заменил, все стало хорошо. Вот и решил подойти к вопросу переменных ещё ближе :)

P.s. правда, жалею, что решил обновиться до 5.3.2, шрифты полетели, спрайты полетели, расстроился актуальным билдом. Установил последний патч, вроде пофиксили, но текст не отображается, если канвас при старте сцены отключен. Вот такие дела, думал на актуальное версии будет незаметный прирост оптимизации.
Аватара пользователя
DimeX
UNIт
 
Сообщения: 63
Зарегистрирован: 28 май 2015, 22:23
Откуда: Беларусь
Skype: DimeX-By

Re: Как лучше организовать работу с переменными

Сообщение waruiyume 05 фев 2016, 21:57

Первое правило оптимизации: не оптимизируй.
Второе правило оптимизации: не оптимизируй пока что.
Третье правило оптимизации: если решил оптимизировать, начинай с того, сначала смотришь в профайлер.

Заметил, что я для вращения игрока в update постоянно создаю new Vector 3, понял, что видимо это гиблое дело. Убрал, заменил, все стало хорошо.

Что-то я в этом сомневаюсь :-\
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону


Вернуться в Код

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2