Какой самый быстрый способ вернуть список объектов в C #?

StackOverflow https://stackoverflow.com/questions/1358821

Вопрос

Я пишу плагин для программы 3D-моделирования.В API есть функция, с помощью которой вы можете перехватить конвейер отображения и вставить дополнительную геометрию, которая будет отображаться без фактического присутствия в модели (вы можете видеть ее, но не можете выбрать / переместить / удалить и т.д.и т.д.).

Частью этой функции API является метод, который вызывается при каждом обновлении экрана и используется для указания программе, какую дополнительную геометрию отображать.Прямо сейчас у меня есть Хэш - набор это повторяется с помощью оператора foreach . ОнБреп является общим геометрическим классом API.

У меня есть дополнительная команда, которая поместит "Призрачную" геометрию в реальную модель.Я обнаружил, что если геометрия действительно присутствует в модели, отображение значительно ускоряется.Итак, мне интересно, есть ли более быстрый способ предоставить программе список объектов?Будет ли простой одномерный массив значительно быстрее, чем HashSet<>?

Это было полезно?

Решение

Самый быстрый способ вернуть коллекцию объектов - это вернуть либо (а) фактический физический тип, который использовался внутренне для создания коллекции, либо (б) тип, к которому можно привести таким образом, чтобы данные не копировались в память.Как только вы начнете копировать данные (например CopyTo, ToArray, ToList, конструктор копирования и т.д.) вы потеряли время.

Сказав это, если количество элементов не велико, это будет микрооптимизация, и поэтому, вероятно, не стоит этого делать.В этом случае просто верните тип коллекции, который был бы наиболее полезен для вызывающего кода.Если вы непривычны, проведите несколько временных тестов, вместо того чтобы строить догадки.

Другие советы

Это здесь это обширное исследование производительности hashset / dictionary / generic list

Но речь идет о поиске ключей

Лично я думаю, что обычный или универсальный список быстрее для операции foreach, поскольку он не включает в себя индексированные элементы / накладные расходы (особенно вставка и т.д. Должна быть быстрее)....Но это всего лишь внутреннее ощущение.

Обычно при работе с 3D-графикой вы получаете наилучшую производительность, если вам удается максимально сократить количество вызовов рисования / изменений состояния.

В вашем случае я бы постарался свести вызовы draw к минимуму, объединив вашу украшенную геометрию или попытавшись использовать какую-то функцию пакетной обработки, если она доступна.

Очень вероятно, что удаление фрейма происходит не из-за использования хэш-списка / словаря вместо массива.(Если только где-то нет сломанной / дорогостоящей функции хеширования ...).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top