Dicas de otimização para aplicações Qt
-
Upload
microsoft-mobile-developer -
Category
Technology
-
view
967 -
download
3
Transcript of Dicas de otimização para aplicações Qt
1
Dicas de otimização para aplicações Qt e QML.
Copyright 2012 Nokia
Introdução
2
• Willer Moreira Bacharel em Ciência da Computação - UFAM Desenvolvedor de Software no INdT desde 2006 Projeto PySide Desenvolve aplicações Qt/QML
Copyright 2012 Nokia
TÓPICOS
3
• Porque performance é importante
• Como melhorar a performance das suas aplicacões
• Perguntas
Copyright 2012 Nokia
Porque performance é importante
4
• É 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âmicas
Copyright 2012 Nokia
Porque performance é importante
5
• Qt Everywhere Desktop Plataformas embarcadas com recursos limitados
• Nem todas as aplicações podem tirar vantagem do uso
de múltiplos cores
Copyright 2012 Nokia
Como melhorar a performance
6
• 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.
Copyright 2012 Nokia
Teoria das restrições
7
• 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!
Copyright 2012 Nokia
Identificando o gargalo
8
• 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.
Copyright 2012 Nokia
Identificando o gargalo
9
• 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ção
Copyright 2012 Nokia
Explorar o gargalo
10
• 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 eficiente
Copyright 2012 Nokia
QVector vs QLinkedList vs QList
11
• 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 lentas
Copyright 2012 Nokia
QVector vs QLinkedList vs QList
12
• QLinkedList Usada para grande quantitade de elementos Tempo constante para inserções e remoções
Copyright 2012 Nokia
QVector vs QLinkedList vs QList
13
• QList De longe é o container mais usado Gera menos código para o executável Aloca espaço no inicio e no fim da estrutura
Copyright 2012 Nokia
QVector vs QLinkedList vs QList
14
• 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 QLinkedList
Copyright 2012 Nokia
Qt implicit data sharing
15
• Maximiza o reuso de objetos e minimiza a cópia
Copyright 2012 Nokia
Qt implicit data sharing
16
• Objeto somente é copiado se for modificado
Copyright 2012 Nokia
Qt implicit data sharing
17
• 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?
Copyright 2012 Nokia
Qt implicit data sharing
18
• Exemplos:
QTransform não usa implicit data sharing
Copyright 2012 Nokia
Qt implicit data sharing
19
• 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.html
Copyright 2012 Nokia
Dicas de Otimização para QML
20 Copyright 2012 Nokia
Dividir e conquistar
21 Copyright 2012 Nokia
Dividir e conquistar
22
• 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 gigante
Copyright 2012 Nokia
Dividir e conquistar
23
• 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 .qml
Copyright 2012 Nokia
Load e Unload
24 Copyright 2012 Nokia
Load e Unload
25
• 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ário
Copyright 2012 Nokia
Load e Unload
26 Copyright 2012 Nokia
Otimizar o uso de Imagens
27 Copyright 2012 Nokia
Otimizar o uso de Imagens
28
• 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)
Copyright 2012 Nokia
Operações com Strings
29 Copyright 2012 Nokia
Operações com Strings
30
• 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_PLUS
Copyright 2012 Nokia
Dominar States, Transitions e Animations
31 Copyright 2012 Nokia
States, Transitions e Animations
32
• 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 StateChandeScript
Copyright 2012 Nokia
Seguir sempre as boas práticas de programação
33 Copyright 2012 Nokia
Boas práticas
34
• 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ção
Copyright 2012 Nokia
Links úteis
35
• 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.html
Qt Performance Tuning Copyright 2012 Nokia
Canais de comunicação
36
• @nokiadev_brasil • http://bit.ly/NokiaDev_Qt_Brasil • http://blog.qtlabs.org.br/ • [email protected] • [email protected]
Copyright 2012 Nokia
Perguntas?
Copyright 2012 Nokia
Obrigado!
Copyright 2012 Nokia