C# заставляет гореть!

Общие вопросы о Unity3D

C# заставляет гореть!

Сообщение NAGIBATOR228pacan 14 апр 2019, 14:14

Я просто не понимаю какими надо быть аутистическими даунами чтобы заместо c++ додуматься сделать c# в движке для ИГР!?!?!??
Вот я уже не знаю что делать, просто где delete в этом долбанном c#? Вот у меня такая сейчас проблема, есть статический массив довольно большой и надо его предопределять при создании нового объекта потому что количество элементов для каждого объекта разное, например myarray = new int[i*j*k]; где переменные в скобках для каждого объекта разные, так вот если оставить так то спустя кучу созданий таких объектов при открытие диспетчера можно ужаснутся от того что у тебя уже пару гигов оперативки прожранно, как мне избежать такой фигни? И да каждый объект не хранит массив, он делает расчеты на основе этого массива потом он уже не нужен становится и поэтому он статический и следующий новый объект его пересоздаёт под свои нужды. Со списком я вроде разобрался и смог избежать утечки памяти, только вот с массивом я не знаю что делать, а нужен именно массив, в c++ можно было просто delete написать и создавать заново и все вроде бы должно быть нормально по-крайней мере я проверил и c++ такой проблемы нет,но как в c# такое провернуть? GC.Collect() писать пробовал не помогает
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: C# заставляет гореть!

Сообщение Jarico 14 апр 2019, 14:30

Просто признай факт того что ты глупый (я уверен на 70% что ты шкальник который хочет блеснуть знаниями отвечая в разных темах умными словами но задавая абсолютно тупые вопросы)
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: C# заставляет гореть!

Сообщение NAGIBATOR228pacan 14 апр 2019, 15:00

Jarico писал(а):Просто признай факт того что ты глупый (я уверен на 70% что ты шкальник который хочет блеснуть знаниями отвечая в разных темах умными словами но задавая абсолютно тупые вопросы)

Спасибо за адекватный ответ по теме, если ты хочешь думать то что хочешь, а не как есть я тебе ничем не мешаю, я бы не спрашивал если бы хотел умничать, реши мою проблему если она глупая, я вот не могу нагуглить как. Ничем я блистать не хочу и умные слова не использую, я всегда тут писал что я полное дно в программировании и то что мои советы слушать надо в последнюю очередь и ничего толком не знаю, а если знаю то то что не нужно, и многому предстоит научится, отвечаю только в простейших темах в которых действительно считаю что могу помочь, то что c# полное дерьмо для игр я не то что прочитал в интернете, а просто сегодня сам проверил аналогичный код на c++ выполняется где-то в 1.75-2,5 раз быстрее и утечки памяти контролируешь ты сам, я этот массив гененрирую только чтобы отправить в плагин который работает на c++ опять же потому что на c++ то что мне нужно выполняется за 8-10 секунд, когда без него выполняется 15-18, и это я только половину кода перенес, вот вторую не могу из-за этого долбанного массива который не удаляется, ну раз такой глупый вопрос то помоги мне решить проблему
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: C# заставляет гореть!

Сообщение samana 14 апр 2019, 15:08

Покажите ваш код и его проблемную часть, а то на словах невозможно что либо правильно представить и подсказать. Статический массив по логике не может быть для каждого объекта разный, так как статика не привязана к объекту, а к классу.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: C# заставляет гореть!

Сообщение NAGIBATOR228pacan 14 апр 2019, 15:12

samana писал(а):Покажите ваш код и его проблемную часть, а то на словах невозможно что либо правильно представить и подсказать.

Сейчас кода нет, ибо не за компом, но происходит что-то такое.
Синтаксис:
Используется csharp
static int[] a;
void Start()
{
   int k = Random.Range(10000,100000);
   a = new int[k];
}
 

Кароче вот когда я создаю очень много объектов оперативка очень сильно забивается, в c++ бы если в конце добавить delete[] a, такой проблемы не возникает
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: C# заставляет гореть!

Сообщение Xtir 14 апр 2019, 15:25

Почему бы тебе тогда не попробовать UE?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: C# заставляет гореть!

Сообщение samana 14 апр 2019, 15:25

Вы точно понимаете, что такое статический массив? Сейчас ваш код, при создании, допустим 50-ти объектов, 50 раз подряд создаёт большие массивы и назначает их одной и той же переменной.
Какая задумка лежит в основе этого кода?
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: C# заставляет гореть!

Сообщение Xtir 14 апр 2019, 15:27

NAGIBATOR228pacan писал(а):
samana писал(а):в c++ бы если в конце добавить delete[] a, такой проблемы не возникает

А null не поможет?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: C# заставляет гореть!

Сообщение NAGIBATOR228pacan 14 апр 2019, 15:34

Кароче при создании объекта(объекты создаются последовательно) он должен сгенерировать массив длины зависящий количества вершин(а их может быть от 0 до сотен тысяч), построить на этой основе меш, сам массив дальше уже не нужен, поэтому я сделал его статическим основываясь на логике что если объекты последовательно создаются то можно сделать всего один массив на всех и просто его заново использовать для каждого объекта, но все было бы хорошо если бы массив был одной длины и его не надо было пересоздавать, но у меня массив всегда разного размера, и его надо пересоздавать и как я понял когда его пересоздаешь он не освобождает память выделенную на старый массив и поэтому происходит такая дичь, потому что вручную освободить память как в c++ нельзя
Последний раз редактировалось NAGIBATOR228pacan 14 апр 2019, 15:37, всего редактировалось 2 раз(а).
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: C# заставляет гореть!

Сообщение NAGIBATOR228pacan 14 апр 2019, 15:35

Xtir писал(а):
NAGIBATOR228pacan писал(а):
samana писал(а):в c++ бы если в конце добавить delete[] a, такой проблемы не возникает

А null не поможет?

Нет не помогает
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: C# заставляет гореть!

Сообщение 1max1 14 апр 2019, 15:42

Могу тебя обрадовать, в юнити можно использовать код С++ и даже С, для этого есть https://docs.unity3d.com/ru/current/Man ... ugins.html

p.s. еще совет, попробуй использовать локальный массив в каком-то методе, а не делать его статическим.
Последний раз редактировалось 1max1 14 апр 2019, 15:44, всего редактировалось 1 раз.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: C# заставляет гореть!

Сообщение NAGIBATOR228pacan 14 апр 2019, 15:44

1max1 писал(а):Могу тебя обрадовать, в юнити можно использовать код С++ и даже С, для этого есть https://docs.unity3d.com/ru/current/Man ... ugins.html

Да я так этим и занимаюсь, но отправить массив из c# мне надо в плагин, на чистом c++ не попишешь все равно
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: C# заставляет гореть!

Сообщение samana 14 апр 2019, 15:46

NAGIBATOR228pacan писал(а):Кароче при создании объекта(объекты создаются последовательно) он должен сгенерировать массив длины зависящий количества вершин(а их может быть от 0 до сотен тысяч), построить на этой основе меш, сам массив дальше уже не нужен, поэтому я сделал его статическим основываясь на логике что если объекты последовательно создаются то можно сделать всего один массив на всех и просто его заново использовать для каждого объекта, но все было бы хорошо если бы массив был одной длины и его не надо было пересоздавать, но у меня массив всегда разного размера, и его надо пересоздавать и как я понял когда его пересоздаешь он не освобождает память выделенную на старый массив и поэтому происходит такая дичь, потому что вручную освободить память как в c++ нельзя

Есть подозрение, что причина не в массивах, но попробуйте в конце очистить массив и вызвать сборщик мусора для эксперимента.
Посмотрите в профайлере, что занимает столько памяти.
1max1 писал(а):Могу тебя обрадовать, в юнити можно использовать код С++ и даже С, для этого есть https://docs.unity3d.com/ru/current/Man ... ugins.html

Теперь у автора темы нет никаких причин чтобы не сделать шедевр :D
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: C# заставляет гореть!

Сообщение NAGIBATOR228pacan 14 апр 2019, 15:48

1max1 писал(а):Могу тебя обрадовать, в юнити можно использовать код С++ и даже С, для этого есть https://docs.unity3d.com/ru/current/Man ... ugins.html

p.s. еще совет, попробуй использовать локальный массив в каком-то методе, а не делать его статическим.

Попробовал память почему-то все равно прожирается
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: C# заставляет гореть!

Сообщение 1max1 14 апр 2019, 15:51

Кстати, я бы не ориентировался на редактор, он у меня тоже поджирает и не хочет освобождать память. Делай тесты уже в готовом билде.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

След.

Вернуться в Общие вопросы

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

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