Страница 1 из 7

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

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

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

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

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

СообщениеДобавлено: 14 апр 2019, 15:00
NAGIBATOR228pacan
Jarico писал(а):Просто признай факт того что ты глупый (я уверен на 70% что ты шкальник который хочет блеснуть знаниями отвечая в разных темах умными словами но задавая абсолютно тупые вопросы)

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

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

СообщениеДобавлено: 14 апр 2019, 15:08
samana
Покажите ваш код и его проблемную часть, а то на словах невозможно что либо правильно представить и подсказать. Статический массив по логике не может быть для каждого объекта разный, так как статика не привязана к объекту, а к классу.

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

СообщениеДобавлено: 14 апр 2019, 15:12
NAGIBATOR228pacan
samana писал(а):Покажите ваш код и его проблемную часть, а то на словах невозможно что либо правильно представить и подсказать.

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

Кароче вот когда я создаю очень много объектов оперативка очень сильно забивается, в c++ бы если в конце добавить delete[] a, такой проблемы не возникает

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

СообщениеДобавлено: 14 апр 2019, 15:25
Xtir
Почему бы тебе тогда не попробовать UE?

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

СообщениеДобавлено: 14 апр 2019, 15:25
samana
Вы точно понимаете, что такое статический массив? Сейчас ваш код, при создании, допустим 50-ти объектов, 50 раз подряд создаёт большие массивы и назначает их одной и той же переменной.
Какая задумка лежит в основе этого кода?

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

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

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

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

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

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

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

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

Нет не помогает

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

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

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

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

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

Да я так этим и занимаюсь, но отправить массив из c# мне надо в плагин, на чистом c++ не попишешь все равно

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

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

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

Теперь у автора темы нет никаких причин чтобы не сделать шедевр :D

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

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

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

Попробовал память почему-то все равно прожирается

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

СообщениеДобавлено: 14 апр 2019, 15:51
1max1
Кстати, я бы не ориентировался на редактор, он у меня тоже поджирает и не хочет освобождать память. Делай тесты уже в готовом билде.