O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Dicas de otimização para aplicações Qt

1.201 visualizações

Publicada em

Em um certo momento no desenvolvimento de uma aplicação especialmente para dispositivos móveis é percebida a necessidade de melhorar o desempenho. Neste webinar, serão apresentadas algumas dicas e boas práticas que podem ser utilizadas para melhorar a performance e o consumo de energia das aplicações feitas em Qt.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Dicas de otimização para aplicações Qt

  1. 1. Dicas de otimização para aplicações Qt e QML.1 Copyright 2012 Nokia
  2. 2. Introdução • Willer Moreira  Bacharel em Ciência da Computação - UFAM  Desenvolvedor de Software no INdT desde 2006  Projeto PySide  Desenvolve aplicações Qt/QML2 Copyright 2012 Nokia
  3. 3. TÓPICOS • Porque performance é importante • Como melhorar a performance das suas aplicacões • Perguntas3 Copyright 2012 Nokia
  4. 4. Porque performance éimportante • É atrativo para o usuário • Deixa sua aplicação com um aspecto mais profissional • O processo de desenvolvimento da sua aplicação fica mais eficiente • Interfaces dinâmicas4 Copyright 2012 Nokia
  5. 5. Porque performance éimportante • Qt Everywhere  Desktop  Plataformas embarcadas com recursos limitados • Nem todas as aplicações podem tirar vantagem do uso de múltiplos cores5 Copyright 2012 Nokia
  6. 6. Como melhorar a performance • TOC - Theory of Constraints (ou Teoria das Restrições) • Esta teoria é baseada na idéia de que em qualquer sistema complexo, existe pelo menos uma restrição que limita sua habilidade de alcançar o seu objetivo ou funcionamento pleno. Para alcançar as melhorias nesse sistema essa restrição deve ser identificada e resolvida.6 Copyright 2012 Nokia
  7. 7. Teoria das restrições • Defina uma meta?:  Por exemplo: Esta aplicação deve rodar em 30 FPS • E então:  (1) Identifique o gargalo (restrição)  (2) Decida como explorar esse gargalo  (3) Faça as melhorias necessárias  (4) Se a meta não foi alcançada, volte para (1)  Pronto!7 Copyright 2012 Nokia
  8. 8. Identificando o gargalo • A melhor forma de identificar o gargalo:  Ferramentas de profiling − Shark (Mac OS X) − Valgrind (X11) − Visual Studio Profiler (Windows) − QML Performance Monitor • Obs: Sempre faça as medições no modo release.8 Copyright 2012 Nokia
  9. 9. Identificando o gargalo • Quando o gargalo é identificado:  Verifique se a implementação usada é a melhor a ser usada para essa tarefa • Uma vez que a melhor implementação foi escolhida, você pode explorar esse gargalo  Design  Código fonte  Compilação9 Copyright 2012 Nokia
  10. 10. Explorar o gargalo • Dicas gerais:  Cache  Atrasar um processamento até que ele seja realmente necessário  Otimizações de compilação • Técnicas de Otimização para o Qt  Escolher sempre o Container correto − QVector vs QLinkedList vs QList  Usar “implicit data sharing” de forma eficiente10 Copyright 2012 Nokia
  11. 11. QVector vs QLinkedList vsQList • QVector  Itens são armazenados continuamente na memória  Somente um bloco de memória é alocado  Inserções no inicio e no meio são lentas11 Copyright 2012 Nokia
  12. 12. QVector vs QLinkedList vsQList • QLinkedList  Usada para grande quantitade de elementos  Tempo constante para inserções e remoções12 Copyright 2012 Nokia
  13. 13. QVector vs QLinkedList vsQList • QList  De longe é o container mais usado  Gera menos código para o executável  Aloca espaço no inicio e no fim da estrutura13 Copyright 2012 Nokia
  14. 14. QVector vs QLinkedList vsQList • QList é mais fácil de usar e gera menos código • Na maioria dos caso, QList é a ideal para se usar. • Se você só faz append(), use QVector • Se você deseja tempos constantes de inserção e remoção no meio do array, use QLinkedList14 Copyright 2012 Nokia
  15. 15. Qt implicit data sharing • Maximiza o reuso de objetos e minimiza a cópia15 Copyright 2012 Nokia
  16. 16. Qt implicit data sharing • Objeto somente é copiado se for modificado16 Copyright 2012 Nokia
  17. 17. Qt implicit data sharing • Como evitar deep-copy:  Use somente operadores e funções const se possível  Use o foreach com moderação  Passar objectos como const sempre é um bom hábito, mesmo quando estiver trabalhando com classes que não usam implicit data sharing  Exemplos?17 Copyright 2012 Nokia
  18. 18. Qt implicit data sharing • Exemplos: QTransform não usa implicit data sharing18 Copyright 2012 Nokia
  19. 19. Qt implicit data sharing • Acessem o documento “Implicitly Shared Classes” para ver a lista completa de classes que usam implicit data sharing no Qt • http://doc.qt.nokia.com/4.7-snapshot/implicit- sharing.html19 Copyright 2012 Nokia
  20. 20. Dicas de Otimização para QML20 Copyright 2012 Nokia
  21. 21. Dividir e conquistar21 Copyright 2012 Nokia
  22. 22. Dividir e conquistar • Dividir a interface da aplicação em múltiplos arquivos QML • Cada entidade lógica será um arquivo QML • Pensar em um modo Orientado a Objetos • Não usar um arquivo QML gigante22 Copyright 2012 Nokia
  23. 23. Dividir e conquistar • Usar o arquivo main.qml como a interface principal  Com diferentes states e transitions  Criar múltiplas views (.qml)  Importar diretórios contendo outros arquivos .qml23 Copyright 2012 Nokia
  24. 24. Load e Unload24 Copyright 2012 Nokia
  25. 25. Load e Unload • Usar o Loader para controlar o consumo de memória • Carregar somente o mínimo possível no inicio • Dinamicamente carregar e liberar componentes de UI • Criar componentes novos quando necessário25 Copyright 2012 Nokia
  26. 26. Load e Unload26 Copyright 2012 Nokia
  27. 27. Otimizar o uso de Imagens27 Copyright 2012 Nokia
  28. 28. Otimizar o uso de Imagens • Diminuir o consumo de memória • Especificar o tamanho exato da imagem • Evitar fazer resize/scaling de imagens no QML • Usar a propriedade smooth com moderação • Carregar imagens grandes em background (asynchronous=true) • Não fazer cache de imagens muito grandes (cache=false)28 Copyright 2012 Nokia
  29. 29. Operações com Strings29 Copyright 2012 Nokia
  30. 30. Operações com Strings • Uso exagerado do operador + resulta em múltiplas alcocações de memória • Usar StringBuilder sempre que possível • Definir  #define QT_USE_FAST_CONCATENATION  #define QT_USE_FAST_OPERATOR_PLUS30 Copyright 2012 Nokia
  31. 31. Dominar States, Transitions e Animations31 Copyright 2012 Nokia
  32. 32. States, Transitions eAnimations • Em um Transition, a área animada deve ser pequena • Animar diferentes itens sequencialmente sempre que possível • Evitar usar muitos Timers durante animações • Evitar fazer operações com JavaScript durante as animações • Usar ScriptAction e StateChandeScript32 Copyright 2012 Nokia
  33. 33. Seguir sempre as boas práticas de programação33 Copyright 2012 Nokia
  34. 34. Boas práticas • Para melhor performance use C++ e não JavaScript • Inserir propriedades sempre no topo das declarações de elementos • Criar a lógica da aplicação fora do QML • Não sobrepor muitas camadas de elementos QML • Usar Qt i18n para internacionalização34 Copyright 2012 Nokia
  35. 35. Links úteis • QML Performance Monitor  http://www.youtube.com/watch?v=XdI9C53uJw8 • Valgrind  http://valgrind.org/docs/manual/mc-manual.html • QML Performance Guidelines  http://doc.qt.nokia.com/4.7/qdeclarativeperformance .html • Qt Implicit Data Sharing  http://doc.qt.nokia.com/4.7-snapshot/implicit- sharing.html35 Copyright 2012 Nokia
  36. 36. Canais decomunicação• @nokiadev_brasil• http://bit.ly/NokiaDev_Qt_Brasil• http://blog.qtlabs.org.br/• willer.moreira@openbossa.org• willer.moreira@indt.org.br 36 Copyright 2012 Nokia
  37. 37. Perguntas?Copyright 2012 Nokia
  38. 38. Obrigado!Copyright 2012 Nokia

×