Otimizando desempenho: usufruindo hardware

A arquitetura interna do WPF tem dois pipelines de renderização, hardware e software. Este tópico apresenta informações sobre esses pipelines de renderização para ajudá-lo a tomar decisões sobre otimizações de desempenho de seus aplicativos.

Pipeline de renderização de hardware

Um dos fatores mais importantes para determinar o desempenho do WPF é que ele é vinculado à renderização — quanto mais pixels você tiver que renderizar, maior será o custo de desempenho. No entanto, quanto mais renderização puder ser transferida para a unidade de processamento gráfico (GPU), mais benefícios de desempenho você poderá obter. O pipeline de renderização de hardware do aplicativo WPF aproveita ao máximo os recursos do Microsoft DirectX no hardware que oferece suporte a um mínimo do Microsoft DirectX versão 7.0. Outras otimizações podem ser obtidas pelo hardware que oferece suporte aos recursos do Microsoft DirectX versão 7.0 e PixelShader 2.0+.

Pipeline de renderização de software

O pipeline de renderização de software WPF é totalmente vinculado à CPU. O WPF aproveita os conjuntos de instruções SSE e SSE2 na CPU para implementar um rasterizador de software otimizado e completo. Fazer fallback para o software é uma funcionalidade de aplicativo contínua disponível a qualquer momento e não pode ser renderizada usando o pipeline de renderização de hardware.

O maior problema de desempenho que você encontrará ao renderizar no modo de software está relacionado à taxa de preenchimento, que é definida como o número de pixels que você está renderizando. Se você estiver preocupado com o desempenho no modo de renderização de software, tente minimizar o número de vezes que um pixel é redesenhado. Por exemplo, se você tiver um aplicativo com uma tela de fundo azul, que então renderiza uma imagem levemente transparente sobre ela, você renderizará todos os pixels no aplicativo duas vezes. Como resultado, levará duas vezes mais tempo para renderizar o aplicativo com a imagem que se você tivesse apenas a tela de fundo azul.

Camadas de renderização de gráficos

Pode ser muito difícil prever a configuração de hardware em que seu aplicativo será executado. No entanto, convém considerar um design que permita ao seu aplicativo mudar continuamente entre os recursos ao executar em hardware diferente para que possa se beneficiar totalmente de cada configuração de hardware diferente.

Para conseguir isso, o WPF fornece funcionalidade para determinar a capacidade gráfica de um sistema em tempo de execução. A capacidade gráfica é determinada categorizando a placa de vídeo como uma das três camadas de capacidade de renderização. O WPF expõe uma API que permite que um aplicativo consulte a camada de capacidade de renderização. Seu aplicativo então pode adotar diferentes caminhos de código no tempo de execução, dependendo da camada de renderização que tem suporte no hardware.

Os recursos do hardware gráfico que mais afetam os níveis de camada de renderização são:

  • RAM de Vídeo A quantidade de memória de vídeo no hardware gráfico determina o tamanho e o número de buffers que podem ser usados para compor gráficos.

  • Sombreador de Pixel Um sombreador de pixel é uma função de processamento gráfico que calcula efeitos por pixel. Dependendo da resolução dos gráficos exibidos, pode haver muitos milhões de pixels que precisam ser processados para cada quadro de vídeo.

  • Sombreador de Vértice O sombreador de vértice é uma função de processamento gráfico que realiza operações matemáticas nos dados de vértice do objeto.

  • Suporte Multitextura Suporte multitextura refere-se à capacidade de aplicar duas ou mais texturas distintas durante uma operação de mesclagem em um objeto gráfico 3D. O grau de suporte a multitextura é determinado pelo número de unidades de multitextura no hardware gráfico.

Os recursos de sombreador de pixel, sombreador de vértice e multitextura são usados para definir níveis de versão específicos do DirectX, que, por sua vez, são usados para definir as diferentes camadas de renderização no WPF.

Os recursos do hardware gráfico determinam a capacidade de renderização de um aplicativo WPF. O sistema WPF define três camadas de renderização:

  • Camada de Renderização 0 Sem aceleração de hardware gráfico. O nível de versão do DirectX é menor que a versão 7.0.

  • Camada de Renderização 1 Aceleração parcial de hardware gráfico. O nível de versão do DirectX é maior ou igual à versão 7.0 e menor que a versão 9.0.

  • Camada de Renderização 2 A maioria dos recursos gráficos usa aceleração de hardware gráfico. O nível de versão do DirectX é maior ou igual à versão 9.0.

Para obter mais informações sobre camadas de renderização WPF, consulte Camadas de renderização de gráficos.

Confira também