Pergunta

Estou escrevendo um plug-in para um programa de modelagem 3D. Existe um recurso AA da API em que você pode interceptar o pipeline de exibição e inserir geometria adicional que será exibida sem realmente estar no modelo (você pode vê -lo, mas não pode selecionar/mover/excluir etc. etc.) .

Parte desse recurso da API é um método que é chamado em cada atualização de tela usada para informar ao programa qual geometria extra ser exibida. Agora eu tenho um Hashset Isso é iterado com uma declaração foreach. OnBrep é a classe de geometria genérica da API.

Eu tenho um comando adicional que despejará a geometria "fantasma" no modelo real. Descobri que, se a geometria estiver realmente no modelo, a tela acelera muito. Então, estou me perguntando se existe uma maneira mais rápida de fornecer a lista de objetos para o programa? Uma simples matriz unidimensional seria significativamente mais rápida que um hashset <>?

Foi útil?

Solução

A maneira mais rápida de retornar uma coleção de objetos é retornar (a) o tipo físico real usado internamente para construir a coleção ou (b) um tipo que pode ser lançado de tal maneira que os dados não sejam copiados em memória. Assim que você começa a copiar dados (por exemplo CopyTo, ToArray, ToList, um construtor de cópias, etc.) Você perdeu tempo.

Dito isto, a menos que o número de itens seja grande, isso será uma micro-otimização e, portanto, provavelmente não vale a pena fazer. Nesse caso, basta retornar o tipo de coleção que seria mais útil para o código de chamada. Se você é desconfortável, faça alguns testes de tempo em vez de adivinhar.

Outras dicas

Isso aqui é um extenso estudo sobre o desempenho da lista de hashset/dicionário/genérico

Mas é sobre pesquisas importantes

Personnaly, acho que uma lista normal ou genérica é mais rápida para uma operação para e cada uma vez que não envolve itens indexados/despesas gerais (a inserção do ESP etc. deve ser mais rápida) ... mas isso é apenas um sentimento.

Geralmente, ao trabalhar com gráficos 3D, você obtém o melhor desempenho se conseguir reduzir as chamadas de desenho/alterações de estado o máximo possível.

No seu caso, eu tentaria reduzir as chamadas de desenho ao mínimo, mesclando sua geometria adornada ou tentando usar algum tipo de recurso em lote, se estiver disponível.

É muito provável que a queda do quadro não seja por causa do uso de uma lista/dicionário de hash em vez de uma matriz. (A menos que haja uma função de hash quebrada/cara em algum lugar ...).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top