Pull to refresh
4
0
Алексей Козорезов @vangogih

Разработчик игр Unity3D

Send message

Как я понимаю в Unity вообще своя система работы с многопоточностью. И если Вам надо написать производительное приложение консольное, то вы можете использовать System.Threading.


Программа на C# запускается как единственный поток, автоматически создаваемый CLR и операционной системой (“главный” или первичный поток), и становится многопоточной при помощи создания дополнительных потоков.

В Unity же дела обстоят совсем иначе. Там исконно все объекты являются производными от MonoBehaviour, что создает разного рода накладки. Не шибко производительным код считается из-за плохой организации хранения объектов в памяти и доступа к ним. Так же многие встроенные методы (Start, Update, Awake) работают по принципу черного ящика и где именно находится точка входа сложно понять как и понять в каком порядке они вызываются. По хорошему посмотреть Ваш проект на Unity, посмотреть на то как там вызываются все методы, как Вы адоптировали код. Если вы импортировали библиотеки, то имеет место overhead вызова метода и загрузки библиотеки, а если вы в каждом кадре такое делаете, то не мудрено что производительность упала многократно. Так же возникают и свои накладки в работе Garbage Collector'а, если у вас создается слишком много объектов, которые потом редко используются.
Писать приложение в консоли и писать в Unity это 2 разные вещи. В помощь могу Вам посоветовать вот эту статью, которая, возможно, поможет ответить на Ваши вопросы.
https://software.intel.com/en-us/articles/putting-your-data-and-code-in-order-data-and-layout-part-2

2

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity