Какой самый быстрый способ вернуть список объектов в C #? - PullRequest
2 голосов
/ 31 августа 2009

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

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

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

Ответы [ 3 ]

1 голос
/ 31 августа 2009

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

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

0 голосов
/ 31 августа 2009

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

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

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

0 голосов
/ 31 августа 2009

Это здесь - обширное исследование производительности хэш-набора / словаря / общего списка

Но это касается поиска ключевых слов

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

...