2015-12-24 2 views
6

У меня есть список, и я хочу назначить его массив свойству.Получить массив из списка без выделения кучи

public void BuildMesh(List<Vector3> list){ 
    mesh.vertices=list.ToArray(); 
} 

Теперь проблемы:

  • Проект игра и очень жесткий по сбору мусора поэтому реализация по умолчанию ToArray() не вариант, поскольку он создает новый массив рядом внутреннего массив Листа ,
  • Мешевый объект из API с закрытым исходным кодом, а свойство vertices является Vector3 [], поэтому он не может назначить ему указатель.

Есть ли у меня возможность предотвратить выделение кучи?

EDIT: Это не дубликат

Невозможно использовать IList<Vector3>. Сетка из API с закрытым исходным кодом и требует Vector3 [], поэтому я не могу назначить ему IList<Vector3>.

+3

Возможный дубликат [Список на T \ [\] без копирования] (http://stackoverflow.com/questions/4972951/listt-to-t-without-copying) –

+1

@VadimMartynov Это еще один вопрос. Сетка из API с закрытым исходным кодом и требует Vector3 [], поэтому я не могу назначить IList . –

+0

Если у вас есть объект фиксированного размера, просто не удаляйте объект. Вместо этого просто пометьте объект неиспользуемым. Создайте фиксированный массив объектов в начале программы. Затем отметьте используемый или неиспользуемый объект вместо создания и удаления объекта. Сбор мусора не требуется. – jdweng

ответ

2

Я думаю, вы используете Unity. Если я прав, попробуйте mesh.SetVertices(list), которые принимают List<Vector3>.

+0

Да, это работает. Мне также интересно найти общее решение проблемы. –

+1

Я думаю, что это невозможно, потому что внутренний массив List может быть больше его Count. Если определенное количество вершин используется часто как 64 вершины все время, вы можете попытаться повторно использовать этот массив, чтобы предотвратить дальнейшее распределение кучи. –

+0

The Setvertices отлично работает с нулевым распределением GC. Поэтому моя проблема по существу решена в этом вопросе, и я ответил на ваш ответ. Вопрос также важен как общая проблема с C#. Что, если мы столкнемся с ситуацией в API, кроме единства? –

Смежные вопросы