Подробно рассмотрим варианты оптимизации в C# и Юнити. Разбераем optimization code tricks применяемые в индустрии GameDave в градациях Easy, Normal, Hard. Подробно касаемся тем: кодогенерация, использование frame budget, написание перфомнас тестов, тулинг, быстрая рефлексия. Открываем оптимизацию кода с изнанки на максимум! Среди прочего: - Так ли хорош StringBuilder? - Сколько нужно LINQ-запросов, чтобы просел FPS? - Как писать быструю рефлексию? - Code optimization & frame budget - И что же там такое интересное вышло в .NET 5? в гостях у АВТОРОВ курса 'АРХИТЕКТУРА МОБИЛЬНЫХ ИГР НА UNITY ДЛЯ ПРОФЕССИОНАЛОВ' СПИКЕР: ДЖОШУА ЛАЙТ, Lead .NET Developer, Plarium Наш портал: По всем вопросам: ============================================== 0:00 Начало 2:43 Приветствие 4:30 Тема трансляции «Optimization Tricks & Tips” 4:45 Знакомство с гостем 5:25 Оптимизация и что про неё нужно знать 6:25 Setup измерение кода 8:53 Tricks советы/лайфхаки 10:10 Easy приемы 11:55 Foreach List vs Array 13:00 Foreach List vs IEnumerable 18:25 Ответ на вопрос: Как бенчмарки получаю времена типа нс 19:10 Ответ на вопрос: Было про сложение vs умножение. А можно умножение vs деление? Там есть операции которые взаимозаменяемы. Например, половину от а можно представить как a/2, а можно как а * 0,5. 20:39 Ответ на вопрос: Актуальны ли будут tricks для тех же мобилок 21:38 Foreach refs vs structs 22:25 Foreach vs LINQ 23:16 StringBuilder vs Concat 24:48 Ответ на вопрос: А если в цикле конкатенировать ? 26:33 Ответ на вопрос: А интерполированная строка против конконтенации будет ? 27:47 Ответ на вопрос: В каких случаях вынесение кусков кода Юнити-проекта в плагины на C имеет смысл? 30:38 31:35 Contains vs IEquatable 35:06 Params 36:25 Recursion 39:10 Ответ на вопрос: плюс в for будет срабатывать предикция на цпу? 40:05 (StartsWith) vs indexer 42:47 Struct size matters 45:09 45:35 Normal приемы 45:45 Static instance cache 49:30 Dictionary vs Array cache 51:00 Inlining 52:54 Ответ на вопрос: Интайр к свойствам сработает ? 53:22 ArraySegment 54:51 Ответ на вопрос: А можно пример где Inlining не полезен ? 57:05 Span 59:14 ArrayPool 01:00:50 Stackalloc 01:02:13 Finalizers 01:03:30 In defensive copy 01:05:44 Digits count (Log) 01:07:50 перерыв 01:14:10 Hard 01:14:51 Digits count (Log) 01:16:38 Pointers (copy) 01:21:51 01:25:20 Ответ на вопрос: Про быстрое вычисление обратного корня из Quake можно еще) 01:27:00 Ответ на вопрос: Только в юньке нет компановки, там boehm (mark&sweep) 01:31:21 Ответ на вопрос: А как самому освободить этот указатель, как в Си, например ? 01:34:37 Ответ на вопрос: Как посоветуете использовать нугет в рамках Юнити? 01:36:30 01:40:27 Emit 01:42:53 Ответ на вопрос: В il2cpp это будет работать? в unity на мобилках? 01:44:17 Tricks 01:45:51 Tips 01:46:33 Tools 01:49:53 Ответ на вопрос: Есть какой-то пак рослин-анализаторов, чтобы тупых оптимизационных ошибок не лепить? 01:51:19 Performance testing 01:52:47 Code-gen 01:53:43 Roslyn 01:54:54 Source generators 01:56:30 Frame budget 01:58:32 Conclusion 02:00:51 Завершение стрима ============================================== Запись наших вебинаров: Запись наших стримов: (18 ) #Unity #C# #gamedev #Юнити #Optimization Code #unitytutorial
Hide player controls
Hide resume playing