Na maioria das vezes, a melhor maneira de obter desempenho é alterar seu algoritmo. Quanto menos geral a implementação, mais perto você fica do metal.
Supondo que isso tenha sido feito ...
Se realmente é um código crítico, tente evitar leituras de memória, evite calcular coisas que podem ser pré-calculadas (embora nenhuma tabela de pesquisa viole a regra número 1). Saiba o que o seu algoritmo faz e escreva de uma maneira que o compilador também saiba. Verifique a montagem para ter certeza de que sim.
Evite falhas de cache. Processo em lote, tanto quanto você puder. Evite funções virtuais e outros indiretos.
Por fim, meça tudo. As regras mudam o tempo todo. O que costumava acelerar o código há 3 anos agora o retarda. Um bom exemplo é 'use funções matemáticas duplas em vez de versões flutuantes'. Eu não teria percebido isso se não tivesse lido.
Eu esqueci - não tem construtores padrão para inicializar suas variáveis, ou se você insiste, pelo menos também cria construtores que não. Esteja ciente das coisas que não aparecem nos perfis. Quando você perde um ciclo desnecessário por linha de código, nada será exibido em seu criador de perfil, mas você perderá muitos ciclos em geral. Novamente, saiba o que seu código está fazendo. Faça com que sua função principal seja enxuta em vez de infalível. Versões infalíveis podem ser chamadas, se necessário, mas nem sempre são necessárias. A versatilidade tem um preço - o desempenho é um.
Editado para explicar por que não há inicialização padrão: Muitos códigos dizem: Vector3 bla; bla = DoSomething ();
A inicialização no construtor é perda de tempo. Além disso, nesse caso, o tempo perdido é pequeno (provavelmente limpando o vetor); no entanto, se os programadores fizerem isso habitualmente, isso aumentará. Além disso, muitas funções criam um temporário (pense em operadores sobrecarregados), que é inicializado como zero e atribuído depois imediatamente. Ciclos perdidos ocultos que são muito pequenos para ver um pico no seu criador de perfil, mas os ciclos de sangria por toda a sua base de código. Além disso, algumas pessoas fazem muito mais em construtores (o que é obviamente um não-não). Vi ganhos de vários milissegundos de uma variável não utilizada, na qual o construtor estava um pouco pesado. Assim que o construtor causar efeitos colaterais, o compilador não poderá otimizá-lo; portanto, a menos que você nunca use o código acima, prefiro um construtor não inicializador ou, como eu disse,
Vector3 bla (noInit); bla = doSomething ();