Pregunta

Estoy escribiendo un plug-in para un programa de modelado 3D. Hay aa función de la API donde se puede interceptar el canal de visualización e insertar la geometría adicional que se mostrará con fuera realmente estar en el modelo (se puede ver, pero no se puede seleccionar / mover / borrar, etc, etc ..) .

Parte de esta función de la API es un método que es llamada en cada actualización de la pantalla que se utiliza para indicarle al programa lo que la geometría adicional que se vea. Ahora mismo tengo una HashSet que se repite a través de una instrucción foreach. OnBrep es la clase de geometría genérico de la API.

Tengo un comando adicional que volcar la geometría "fantasma" en el modelo real. He encontrado que si la geometría es en realidad en el modelo acelera la pantalla hacia arriba mucho. Así que estoy preguntando si hay una manera más rápida proporcionado la lista de objetos en el programa? Sería un simple matriz unidimensional ser significativamente más rápido que un HashSet <>?

¿Fue útil?

Solución

La forma más rápida para devolver una colección de objetos es devolver bien (a) el tipo físico real que se utiliza internamente para construir la colección, o (b) un tipo que se puede convertir en una forma tal que los datos no se copia en la memoria. Tan pronto como comience la copia de datos (por ejemplo CopyTo, ToArray, ToList, un constructor de copia, etc.) que han perdido el tiempo.

Una vez dicho esto, a menos que el número de elementos es grande, este será un micro-optimización y, por tanto, probablemente no vale la pena hacerlo. En ese caso, simplemente devolver el tipo de colección que sería de mayor utilidad para el código de llamada. Si usted es unusure, hacer algunas pruebas de tiempo en lugar de tomar una conjetura.

Otros consejos

Esto aquí es una extensa estudio sobre el rendimiento de hashset / diccionario / lista genérica

Sin embargo, se trata de búsquedas de claves

Personnaly Creo que una lista normal o genérico es más rápido para una operación foreach porque no supone ninguna indexada artículos / cabeza (ESP Inserción etc debe ser más rápido) .... Pero esto es sólo una primera impresión.

Por lo general, cuando se trabaja con gráficos en 3D, se obtiene el mejor rendimiento si logra reducir las llamadas dibujar / cambios de estado tanto como sea posible.

En el caso de que iba a tratar de reducir las llamadas de dibujo a un mínimo mediante la fusión de la geometría adornada o tratando de utilizar algún tipo de función de procesamiento por lotes si está disponible.

Es muy probable que la caída de trama no se debe de utilizar una lista de hash / diccionario en lugar de una matriz. (A menos que haya una función hash roto / cara en alguna parte ...).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top