SlideShare une entreprise Scribd logo
1  sur  38
40ª Reunião Presencial @ LISBOA
DateTime.Parse(“27-07-2013", new CultureInfo("pt-PT"));
http://netponto.org
hashtag #netponto
• Desde 2007 a trabalhar em Sistemas de Informação Web.
• Atualmente a trabalhar na área de Peritagens na maior seguradora do país.
• Tive a oportunidade de trabalhar nas áreas de Negócio - Banca, Saúde, Justiça,
Telecom e Seguros.
• Sempre em ASP.NET!!
Luís Paulino
Cool Things:
Consultor Informático (Outsourcing) desde 2010.
Lic. Engenharia Informática
luiscunhapaulino@gmail.com
pt.linkedin.com/in/luismpaulino
Patrocinador “GOLD”
Twitter: @PTMicrosoft http://www.microsoft.com/portugal
Patrocinadores “Silver”
Patrocinadores “Bronze”
ASP.Net Performance – A pragmatic approach
Agenda
I. Sistemas “Reais” e a génese dos problemas de Performance .
II. Conceitos Gerais Tuning
III. Importância da sistematização dos processos de Análise, de Tuning
e de Validação
IV. Técnicas clássicas e Ferramentas ASP.NET – Do’s & Dont’s
V. Algumas novidades de performance na Framework .NET 4.5
Manutenção de Sistemas
A. Manutenção Corretiva
– Correção de erros de design ou pressupostos errados.
B. Manutenção Adaptativa/Evolutiva
– Criação ou alterações de funcionalidades dos sistemas de forma
a albergar novas regras e/ou mais informação.
C. Manutenção Preditiva
– Criação ou alterações de comportamentos que têm como
objetivo melhorar a performance do sistema de informação.
 - Devido a vários fatores corporativos existe a tendência para
descurar a Manutenção Preditiva em projetos de manutenção.
Tuning’s há muitos…
Sistemas “Maravilha”:
• Design moderno
• Novas tecnologias incluídas
• Built from scratch
• State of the Art
Sistemas “Reais”:
• Design confuso
• Tecnologias desatualizadas
• Construído ao longo do tempo
• Manter é a Arte
• Tipicamente:
– SI’s de organizações médias e grandes.
– go live à mais de 4 anos.
– Elevada rotatividade de recursos.
– Nº elevado de funcionalidades e regras.
– Tecnologias outdated.
• Problemas comuns
– Falta de documentação.
– Falta de Gestão de Alterações.
– Desnormalização da BD ao longo do tempo.
+ sobre sistemas “Reais”
+ Cedo ou + tarde irão surgir
problemas de performance
i. Registar o problema como um
Incidente na KBDB.
ii. Validar a situação. Comunicar se
necessário com Service Desk.
iii. Comunicar incidente ao Service
Manager.
iv. Comunicar através do modelo RACI
v. Estabelecer pressupostos:
Ex: Sistema Disponível e Acessível,
Arquitetura eficaz e fechada, SGBD,
plataforma Web, etc. (Know your Enemies).
Documente-se e pesquise boas práticas,
está tudo na Web!
Pré-Análise
vi - Criar/Rever SLA’s – Service Level
Agreement’s – com o cliente.
Ex: O sistema deve: carregar a página X em
não + de 3 segs com 100 utilizadores
online/s, Carregar grelha de resultados X
em não + de 5 em pesquisa default, etc.
(Know your Allies).
If you know what you are looking for,
you are more apt to find it.
in “The Art of Insight, How to have more AHA! Moments “
Conceitos de Performance Tuning
SLA
Throughput
Profiling &
Instrumentation
Escalabilidade
Performance
Analysis
LatencyPerformance
Tuning
Bottleneck
Ciclo de Performance Tuning
Recolher Dados &
Medir
Analisar &
Identificar
Configurar &
Desenvolver
Testar Resultados
Baseline
1. Estabeleça uma baseline.
- Assegure-se que tem um conjunto de objetivos de performance bem
definidos, planos de teste e métricas base.
2. Obtenha Dados & Meça
- Simule carga e capture métricas de performance.
3. Analise & Identifique Problemas e Melhorias.
- Documente-se.
- Identifique problemas de performance e bottlenecks
4. Configure & Desenvolva
- Otimize a sua aplicação alterandos os pontos identificados na análise.
5. Teste Resultados
- Teste continuidade de comportamentos e meça para verificar que as
alterações foram benéficas.
Quando as otimizações
satisfizerem os objetivos.
Este ciclo é uma instância do ciclo sistemático
Medir-Avaliar-Melhorar-Aprender de Quality Assurance.
Baseline
Conheça os seus objetivos
Inputs:
• Desenho da aplicação, arquitetura e da
infraestrutura.
• Recolher/Definir os requistos QoS
(SLA’s)
• Contragimentos de utilização da
infraestrutura.
• Requisitos de capacidade de carga
inerente da análise de marketing (DW e
BI)
• Cenários e documentação de desenho
para os casos de uso mais significativos.
Outputs:
• Um documento de modelação
da performance que inclua a
informação levantada no
processo de obtenção
• Caso de teste com objectivos
definidos.
Processo de obtenção Baseline
1. Identificar:
1. Cenários Chave;
2. Workload;
3. Objetivos de performance;
4. Orçamento;
5. Passos do processamento;
2. Alocar Orçamento;
3. Avaliar & Validar.
Garantir sempre o retorno rápido à
Baseline criando Configuration
Item do sistema para poder voltar!
Quais os indicadores + relevantes?
Recolher Dados
& Medir
Legenda:
R: tempo de resposta
RTT: round trip time
App Turns: Http Requests
Concurrent Requests: # sockets abertos pelo
browser no servidor
Cs: latência ou tempo de computação no servidor
Cc: latência ou tempo de computação no cliente
Equação da Performance de um pedido:
Throughput
ASP.NET ApplicationsRequests/Sec Web ServiceISAPI Extension
Requests/sec
ASP.NETRequests Current
ASP.NET ApplicationsRequests Executing
ASP.NET ApplicationsRequests Timed Out
Worker Process
ASP.NETWorker Process Restarts
Tempo de resposta/ latência
ASP.NET Request Execution Time
ASP.NET ApplicationsCache Total Entries ASP.NET ApplicationsCache Total
Hit Ratio
ASP.NET ApplicationsCache Total Turnover Rate
ASP.NET ApplicationsCache API Hit Ratio
ASP.NET ApplicationsCache API Turnover Rate
ASP.NET ApplicationsOutput Cache Entries
ASP.NET ApplicationsOutput Cache Hit Ratio
ASP.NET ApplicationsOutput Cache Turnover Rate
Cache
Existe uma miríade de ferramentas de profiling built-in no VS descubra-as!
• Criar uma lista de verificações a fazer baseada nos dados recolhidos
anteriormente e siga-a.
• Utilizar Debug & Trace q.b.
• Identificar problemas de desenho e comunique com os stakeholders.
• Identificar bottleneck’s.
• Produzir um documento que identifique a lista de melhorias propostas
• Identificar a camada e módulo a melhorar
• Os recursos envolvidos
• Os itens do módulo a serem revistos
• Os riscos inerentes das alterações
• Os ganhos de performance previstos.
• O plano de transição (novo Configuration Item) de forma a albergar
as alterações no deploy.
• Utilize ferramentas de análise disponíveis no mercado.
Por onde começar?
Plan Your Dive *
Ao identificar bottlenecks verificar se:
• fluxos + relevantes afetam a performance.
• uso de recursos ou computação afeta a performance.
• fluxos + frequententes.
• passos em que os recursos são acedidos provocando constrangimentos
• computação vs localização dos recursos.
• Quais os compromissos que foram feitos de forma a maximizar a performance?
• Quais os componentes que estão relacionados com outros componentes e/ou
recursos?
• Quais são as chamadas feitas síncrona e assíncronamente?
• Quanto é o trabalho de I/O e o trabalho de processamento?
Identificar Bottlenecks
Análise &
Identificação
Configurar & Desenvolver Dive Your Plan *
• Limite as alterações às previstas na fase de análise.
(Não tente optimizar tudo de uma só vez, numa só iteração)
• Mantenha as alterações num repositório de source control.
• Implemente as alterações incrementalmente sempre que possível.
• Reveja as melhores práticas utilizadas atualmente no mercado.
• Procure a ajuda de especialistas nas comunidades.
• Crie um documento que reflita as alterações necessárias à futura
transição para modo release.
• Documente e forme a equipa em relação às melhores práticas
implementadas.
Performance .NET
Do’s Dont’s
.NET Performance (CLR)
• CLR - Common Language Runtime é a máquina virtual .NET
• “Common” porque permite várias linguagens traduzindo-as em IL
• O CLR não é um interpretador!
- Ele não retraduz o código em Intermediate Language (IL) cada vez que executa um mesmo código.
- O que o CLR faz é compilar código IL em código máquina antes de executá-lo – Just In Time compiling
• Este processo leva algum tempo mas normalmente só precisa de ser feito 1ªvez.
• Uma vez compilado o código mantém-se disponível para execução. *
• Código não usado nunca é compilado JIT.
• Podemos usar NGEN em vez de JIT se necessário boost na performance.
• Permite optimizar as aplicações em compile time e runtime.
source code
C# Code
VB.NET
Code
.NET
Supported
Languages
source code compilation
C# Compiler
VB.NET
Compiler
Other
Supported
Compilers
runtime compilation
Native Code
Common Intermediate Language (IL)
Optimizações CLR (/optimize+ flag )
• É feita uma
optimização dos
fluxos do código
(Branches
optimization)
• A optimização do
compilador JIT fica
também ligada.
// Use /optimize+ compiling option!!
void CLROptimizeExample() {
int unusedVar; // unusedVars are removed
int defaultCompileValue = 0;
while (defaultCompileValue < 20) {
try {
// unreachable code is removed
if (defaultCompileValue == 21) {
unusedVar++;
break;
}
}finally { /* empty finally blocks are removed*/ }
try {/* empty finally blocks are removed*/
} finally { defaultCompileValue++; }
try {/* witht an empty try all blocks are removed */
} catch (Exception) {throw;}
}
}
Do’s em .NET Do’s
Release/Análise = <compilation
debug=“false"/>
void DotNetBadExample() {
const string _myString = "1234567890 netponto";
int i = 0;
for (; i < 20; i++) {
if (_myString.Length > 20 & myContains(_myString, ref i)) {
i = i + 1;
}}}
void DotNetGoodExample() {
const string _myString = "1234567890 netponto";
for (int i = 0; i < 20; i++) {
if (_myString.Length > 20 && myContains(_myString, ref i)) {
i += i + 1;
}}}
• Usar switch.
• Usar Generics. ex: List<T>() em vez de ArrayList()
• Manipulação de strings diferente porque são objetos imutáveis.
• Sol.: Usar StringBuilder em vez de operador de concatenação: + em C#,
& VB.
Minimizar e Aggregar Do’s
.CSS
• Minimizado (sem espaço em branco e sem comentários)
• Num ficheiro (bundling)
• Remover overwrites;
• Usar reduções nas propriedades
• Incluir ícones como background image em vez de Image
• Css sprites
• Jquery em vez de Javascript tradicional
• Jquery.min.{version}.js em modo Release
• Link Directo em vez de ficheiro local
• Utilizar Client-Side Validation
• Minimizado
• Usar Identificadores HTML 5
• Usar CSS classes em vez de style,
• Especificar dimensões imagens.
• Usar CSS para efeitos e Javascript para
comportamentos.
• Incluir scripts depois do markup ou assíncronos
Reduzir interacões
• Reduzir dados, markup, imagens transferidos por req.
• Utilizar paginação na obtenção de grandes conjuntos
de dados.
• Desligue o ViewState e Session em páginas que não
estiver a utilizar
• Minimize o nº de objectos presentes no ViewState.
• Considerar utilizar HTTP Compression.
• Usar Id’s pequenos
• Use JSON em vez de XML
Do’s
Reduzir
Round Trips
• Considerar usar HTTPResponse.IsClientConnected para
verificar se o cliente continua ligado antes de
operações pesadas no servidor. (medir para ver se
melhora).
• Utilize Server.Transfer em vez de Response.Redirect se
possível.
Reduzir
Page.Size()
Executar só se necessário Do’s
• Usar e “abusar” : !Page.IsPostBack, !Page.IsCallback,
!Page.IsCrossPagePostBack
• Dividir a página por conteúdos de forma a aumentar a
eficiência da cache e da renderização, usar UpdatePanels e
Ajax
• Utilize Cache’s, cuidado com os limites e use SQLInjection.
• Usar a Output Cache em páginas relativamente estáticas.
– Pode sempre antecipar expiração através de:
HttpResponse.RemoveOutputCacheItem(“/MyPage.as
px”);
• Remover Módulos HTTP do Pipeline ASP:NET se não os
estiver a utilizar.
• (….)
Let’s see some tricks!
ASP.NET
Performance
Demo
Tratar bem os Recursos Do’s
• Usar StopWatch em vez de Final Datetime –Initial Datetime
• Afinar a Thread Pool.
• Close e/ou Dispose sempre os recursos que abriu explicitamente
– e não os bloqueie ou meta em cache
using(<open connection>){
} // dispose automático
Configuration setting Default Recommended
maxconnection 2 12 * #CPUs
maxIoThreads 20 100
maxWorkerThreads 20 100
minFreeThreads 8 88 * #CPUs
minLocalRequestFreeThreads 4 76 * #CPUs
Do’s em BD’s
• Escolher o .NET Data Provider correto
– Evite OLEDB, System.Data.SqlClient (SQL Server), ODP.NET (Oracle), etc.
• Usar Connection Pooling.
• Usar Stored Procedures em vez queries.
• Usar MARS (Multiple Active Result Sets).
– Retorne múltiplas tabelas para dentro dum DataSet
• Normalizar e redesenhar modelo dados se necessário.
• Evitar Joins (Use select’s diretos em queries complexas).
• Fechar sempre as ligações BD e outros recursos Pooled.
• Deixar a BD em paz, Lazy Loading rocks!
• Não pressuponha nada, investigue comportamento CLR, IIS, SGBD, etc.!
Do’s
Dont’s
• Over Initialize.
• Não chamar o garbage collector GC.Collect() e não chamar Finalizers a la C++;
• Evitar o uso de exceções desnecessárias:
– Para controlo de fluxo.
– Especialmente exceções não geridas! Quanto + perto melhor!
– Nunca apanhar uma exceção só para a lançar de seguida.
– Não tenha medo de usar blocos Try Catch Finally eles não afetam a performance.
• Evitar chamar Page.Bind
• Minimize chamadas DataBinder.Eval, em vez disso usar Cast explícito para DataItem.
• SessionState:
- Evite guardar objetos STA COM
- Evite guardar Session State se não o usar.
Dont’s
Testar
Resultados
Validar melhorias
e comportamentos
• Medir a comparar os valores dos indicadores iniciais, investigar outros indicadores relevantes.
• Verificar se as medições estão corretas, se foram produzidas nas mesmas condições e se cumprem SLA’s.
• Verificar sempre que o comportamento esperado do sistema se mantém.
Teste de Carga em 5 passos
Inputs: Objetivos Performance, workload, Aplicação, planos teste
1. Identificar cenários chave.
2. Identificar workload
3. Identificar métricas
4. Criar casos de teste
5. Simular carga
6. Analisar resultados
Outputs: Plano de testes atualizado, capacidade máxima,
comportamento com várias cargas,
potenciais bottlenecks, recomendações para bottlenecks
Testes de Stress
Estender os testes de carga
Para além dos limites impostos
pelos SLA’s
É uma boa ideia, especialmente em
sistemas críticos.
Deve-se preparar alguns testes de
stress nos pontos mais críticos, i.e.
que exigem uma maior
disponibilidade e/ou carga.
• Melhoramentos no carregamento de páginas:
• bundling e minimização de scripts e CSS.
• Capacidade de obter informação de diagnóstico de performance nos
servidores e na cloud.
• Melhoramentos ao nível do binding em web forms.
• Capacidade de ler e escrever pedidos HTTP de forma assíncrona.
• Suporte para módulos e handlers assíncronos.
Novidades ASP.NET 4.5
Wrap Up
• Abordar o problema como incidente em encaminhá-lo ao longo dos processos numa
metodologia de performance tuning.
Know your goals in every step & Keep Track
• Documente-se previamente e estabeleça objetivos e metas.
Know your enemies, Know your allies & Act wisely
• Desenvolver plano de melhorias e executá-lo rigorosamente, sem desvios de âmbito.
Plan your Dive, Dive your Plan
• A manutenção preditiva é um processo contínuo e deve ser feita desde início.
• Valorize o trabalho efetuado, comunicando quantitativamente os ganhos.
Improve your visibility as a performance tuning expert!
Ainda interessado?
MSDN – Performance
http://msdn.microsoft.com/en-us/library/ms998549
http://msdn.microsoft.com/en-us/library/aa292152(v=vs.71).aspx
http://msdn.microsoft.com/en-us/library/cc668225(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/3xxk09t8(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/ms178139%28v=vs.100%29.aspx
10 ASP.NET Performance and Scalability Secrets
http://www.codeproject.com/Articles/23306/10-ASP-NET-Performance-
and-Scalability-Secrets
SQL Server Performance Monitoring and Tuning How-to Topics
http://msdn.microsoft.com/en-us/library/ms187830(v=sql.105).aspx
Oracle Database Performance Tuning Guide
http://docs.oracle.com/cd/B13789_01/server.101/b10752/perf_overview.htm
NP .Net Profiler
troubleshooting-performance-issues-in-web-application
Patrocinador “GOLD”
Twitter: @PTMicrosoft http://www.microsoft.com/portugal
Patrocinadores “Silver”
Patrocinadores “Bronze”
Próximas reuniões presenciais
• XXXVII Encontro Da Comunidade SQLPORT (PORTO)
20 Jul 2013 - 10:00 "Extended events practical cases" - Vitor Pombeiro
• 24Hours da PASS - 31 Julho 12:00
Practical Performance Troubleshooting - Brent Ozar entre outros.
27/07/2013 – Julho (Lisboa)
21/09/2013 – Setembro (Lisboa)
19/10/2013 – Outubro (Lisboa)
23/11/2013 – Novembro (Lisboa)
Reserva estes dias na agenda! :)
Dúvidas?

Contenu connexe

Tendances

Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoDevops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoThiago Ferreira
 
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?Edlaine Zamora
 
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Criciúma Dev
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreRodrigo Kono
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?Letticia Nicoli
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B Rguestb9d145
 
Tecnologias Web 2.0
Tecnologias Web 2.0 Tecnologias Web 2.0
Tecnologias Web 2.0 Duarte Nunes
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?akamud
 
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIsDevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIsJúnior Porfirio
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileakamud
 
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...Renato Groff
 
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...Rodrigo Wanderley de Melo Cardoso
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumassabrinajn
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaLeandro Parazito
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
A Evolução do Front end
A Evolução do Front endA Evolução do Front end
A Evolução do Front endDouglas Matoso
 
Comparando as Hypes - React & Vue
Comparando as Hypes - React & VueComparando as Hypes - React & Vue
Comparando as Hypes - React & VueHerbert Henrique
 

Tendances (20)

Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoDevops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
 
Onde posso ir como “dev”
Onde posso ir como “dev”Onde posso ir como “dev”
Onde posso ir como “dev”
 
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
 
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B R
 
Tecnologias Web 2.0
Tecnologias Web 2.0 Tecnologias Web 2.0
Tecnologias Web 2.0
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIsDevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
 
Android apps ci
Android apps ciAndroid apps ci
Android apps ci
 
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
 
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
Ecossistema php: O presente, o passado e o futuro da linguagem (back-end) mai...
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumas
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da cultura
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
A Evolução do Front end
A Evolução do Front endA Evolução do Front end
A Evolução do Front end
 
Comparando as Hypes - React & Vue
Comparando as Hypes - React & VueComparando as Hypes - React & Vue
Comparando as Hypes - React & Vue
 

En vedette

The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloComunidade NetPonto
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaComunidade NetPonto
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Comunidade NetPonto
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazComunidade NetPonto
 
Хокку про Heroku
Хокку про HerokuХокку про Heroku
Хокку про HerokuSerge Seletskyy
 

En vedette (7)

The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno Cancelo
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara Silva
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor Tomaz
 
Хокку про Heroku
Хокку про HerokuХокку про Heroku
Хокку про Heroku
 
Toolbelt Theory
Toolbelt TheoryToolbelt Theory
Toolbelt Theory
 

Similaire à 40a Reunião Presencial @ LISBOA

Sonarqube
SonarqubeSonarqube
SonarqubeCDS
 
Monitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsMonitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsRenato Groff
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Igor Abade
 
Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...
Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...
Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...Renato Groff
 
Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018
Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018
Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018Renato Groff
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Alan Carlos
 
RPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPathRPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPathEduardo Britto
 
Planejamento e Gerenciamento de Capacidade para Sistemas Distribuídos
Planejamento e Gerenciamento de Capacidade para Sistemas DistribuídosPlanejamento e Gerenciamento de Capacidade para Sistemas Distribuídos
Planejamento e Gerenciamento de Capacidade para Sistemas Distribuídosluanrjesus
 
SonarQube
SonarQubeSonarQube
SonarQubeCDS
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasKleitor Franklint Correa Araujo
 
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...Renato Groff
 
Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018
Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018
Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018Renato Groffe
 
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...Renato Groff
 
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...Renato Groff
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 

Similaire à 40a Reunião Presencial @ LISBOA (20)

Sonarqube
SonarqubeSonarqube
Sonarqube
 
Monitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application InsightsMonitorando APIs REST com o Application Insights
Monitorando APIs REST com o Application Insights
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 
Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...
Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...
Monitorando APIs REST com o Application Insights - .Azure Weekend 2018 - Camp...
 
Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018
Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018
Monitorando APIs REST com o Application Insights - .NET São Paulo - Junho-2018
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01
 
RPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPathRPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPath
 
Planejamento e Gerenciamento de Capacidade para Sistemas Distribuídos
Planejamento e Gerenciamento de Capacidade para Sistemas DistribuídosPlanejamento e Gerenciamento de Capacidade para Sistemas Distribuídos
Planejamento e Gerenciamento de Capacidade para Sistemas Distribuídos
 
Mpu 2012 ppt
Mpu 2012 pptMpu 2012 ppt
Mpu 2012 ppt
 
E so mais um campinho na tela
E so mais um campinho na telaE so mais um campinho na tela
E so mais um campinho na tela
 
SonarQube
SonarQubeSonarQube
SonarQube
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
Webinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros ÁgeisWebinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros Ágeis
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - .NE...
 
Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018
Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018
Monitorando APIs REST com o Application Insights - NerdZão - Fevereiro-2018
 
Falando sobre DevOps no azure
Falando sobre DevOps no azureFalando sobre DevOps no azure
Falando sobre DevOps no azure
 
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
 
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...
Monitorando aplicações Web com Application Insights, Logic Apps e Slack - Dev...
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 

Plus de Comunidade NetPonto

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Comunidade NetPonto
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João JesusComunidade NetPonto
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsComunidade NetPonto
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosComunidade NetPonto
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoComunidade NetPonto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteComunidade NetPonto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Comunidade NetPonto
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariComunidade NetPonto
 
Arquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureArquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureComunidade NetPonto
 
VSTO + LOB Apps Information Matters
VSTO + LOB Apps Information MattersVSTO + LOB Apps Information Matters
VSTO + LOB Apps Information MattersComunidade NetPonto
 

Plus de Comunidade NetPonto (20)

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto Ferrari
 
NuGet no Contexto Empresarial
NuGet no Contexto EmpresarialNuGet no Contexto Empresarial
NuGet no Contexto Empresarial
 
Arquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureArquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows Azure
 
Developer 0.0 - Tiago Pascoal
Developer 0.0 - Tiago PascoalDeveloper 0.0 - Tiago Pascoal
Developer 0.0 - Tiago Pascoal
 
Kentico CMS 6
Kentico CMS 6Kentico CMS 6
Kentico CMS 6
 
VSTO + LOB Apps Information Matters
VSTO + LOB Apps Information MattersVSTO + LOB Apps Information Matters
VSTO + LOB Apps Information Matters
 

40a Reunião Presencial @ LISBOA

  • 1. 40ª Reunião Presencial @ LISBOA DateTime.Parse(“27-07-2013", new CultureInfo("pt-PT")); http://netponto.org hashtag #netponto
  • 2. • Desde 2007 a trabalhar em Sistemas de Informação Web. • Atualmente a trabalhar na área de Peritagens na maior seguradora do país. • Tive a oportunidade de trabalhar nas áreas de Negócio - Banca, Saúde, Justiça, Telecom e Seguros. • Sempre em ASP.NET!! Luís Paulino Cool Things: Consultor Informático (Outsourcing) desde 2010. Lic. Engenharia Informática luiscunhapaulino@gmail.com pt.linkedin.com/in/luismpaulino
  • 3. Patrocinador “GOLD” Twitter: @PTMicrosoft http://www.microsoft.com/portugal
  • 6. ASP.Net Performance – A pragmatic approach Agenda I. Sistemas “Reais” e a génese dos problemas de Performance . II. Conceitos Gerais Tuning III. Importância da sistematização dos processos de Análise, de Tuning e de Validação IV. Técnicas clássicas e Ferramentas ASP.NET – Do’s & Dont’s V. Algumas novidades de performance na Framework .NET 4.5
  • 7. Manutenção de Sistemas A. Manutenção Corretiva – Correção de erros de design ou pressupostos errados. B. Manutenção Adaptativa/Evolutiva – Criação ou alterações de funcionalidades dos sistemas de forma a albergar novas regras e/ou mais informação. C. Manutenção Preditiva – Criação ou alterações de comportamentos que têm como objetivo melhorar a performance do sistema de informação.  - Devido a vários fatores corporativos existe a tendência para descurar a Manutenção Preditiva em projetos de manutenção.
  • 8. Tuning’s há muitos… Sistemas “Maravilha”: • Design moderno • Novas tecnologias incluídas • Built from scratch • State of the Art Sistemas “Reais”: • Design confuso • Tecnologias desatualizadas • Construído ao longo do tempo • Manter é a Arte
  • 9. • Tipicamente: – SI’s de organizações médias e grandes. – go live à mais de 4 anos. – Elevada rotatividade de recursos. – Nº elevado de funcionalidades e regras. – Tecnologias outdated. • Problemas comuns – Falta de documentação. – Falta de Gestão de Alterações. – Desnormalização da BD ao longo do tempo. + sobre sistemas “Reais” + Cedo ou + tarde irão surgir problemas de performance
  • 10. i. Registar o problema como um Incidente na KBDB. ii. Validar a situação. Comunicar se necessário com Service Desk. iii. Comunicar incidente ao Service Manager. iv. Comunicar através do modelo RACI v. Estabelecer pressupostos: Ex: Sistema Disponível e Acessível, Arquitetura eficaz e fechada, SGBD, plataforma Web, etc. (Know your Enemies). Documente-se e pesquise boas práticas, está tudo na Web! Pré-Análise vi - Criar/Rever SLA’s – Service Level Agreement’s – com o cliente. Ex: O sistema deve: carregar a página X em não + de 3 segs com 100 utilizadores online/s, Carregar grelha de resultados X em não + de 5 em pesquisa default, etc. (Know your Allies).
  • 11. If you know what you are looking for, you are more apt to find it. in “The Art of Insight, How to have more AHA! Moments “
  • 12. Conceitos de Performance Tuning SLA Throughput Profiling & Instrumentation Escalabilidade Performance Analysis LatencyPerformance Tuning Bottleneck
  • 13. Ciclo de Performance Tuning Recolher Dados & Medir Analisar & Identificar Configurar & Desenvolver Testar Resultados Baseline 1. Estabeleça uma baseline. - Assegure-se que tem um conjunto de objetivos de performance bem definidos, planos de teste e métricas base. 2. Obtenha Dados & Meça - Simule carga e capture métricas de performance. 3. Analise & Identifique Problemas e Melhorias. - Documente-se. - Identifique problemas de performance e bottlenecks 4. Configure & Desenvolva - Otimize a sua aplicação alterandos os pontos identificados na análise. 5. Teste Resultados - Teste continuidade de comportamentos e meça para verificar que as alterações foram benéficas. Quando as otimizações satisfizerem os objetivos. Este ciclo é uma instância do ciclo sistemático Medir-Avaliar-Melhorar-Aprender de Quality Assurance.
  • 14. Baseline Conheça os seus objetivos Inputs: • Desenho da aplicação, arquitetura e da infraestrutura. • Recolher/Definir os requistos QoS (SLA’s) • Contragimentos de utilização da infraestrutura. • Requisitos de capacidade de carga inerente da análise de marketing (DW e BI) • Cenários e documentação de desenho para os casos de uso mais significativos. Outputs: • Um documento de modelação da performance que inclua a informação levantada no processo de obtenção • Caso de teste com objectivos definidos. Processo de obtenção Baseline 1. Identificar: 1. Cenários Chave; 2. Workload; 3. Objetivos de performance; 4. Orçamento; 5. Passos do processamento; 2. Alocar Orçamento; 3. Avaliar & Validar. Garantir sempre o retorno rápido à Baseline criando Configuration Item do sistema para poder voltar!
  • 15. Quais os indicadores + relevantes? Recolher Dados & Medir Legenda: R: tempo de resposta RTT: round trip time App Turns: Http Requests Concurrent Requests: # sockets abertos pelo browser no servidor Cs: latência ou tempo de computação no servidor Cc: latência ou tempo de computação no cliente Equação da Performance de um pedido: Throughput ASP.NET ApplicationsRequests/Sec Web ServiceISAPI Extension Requests/sec ASP.NETRequests Current ASP.NET ApplicationsRequests Executing ASP.NET ApplicationsRequests Timed Out Worker Process ASP.NETWorker Process Restarts Tempo de resposta/ latência ASP.NET Request Execution Time ASP.NET ApplicationsCache Total Entries ASP.NET ApplicationsCache Total Hit Ratio ASP.NET ApplicationsCache Total Turnover Rate ASP.NET ApplicationsCache API Hit Ratio ASP.NET ApplicationsCache API Turnover Rate ASP.NET ApplicationsOutput Cache Entries ASP.NET ApplicationsOutput Cache Hit Ratio ASP.NET ApplicationsOutput Cache Turnover Rate Cache Existe uma miríade de ferramentas de profiling built-in no VS descubra-as!
  • 16. • Criar uma lista de verificações a fazer baseada nos dados recolhidos anteriormente e siga-a. • Utilizar Debug & Trace q.b. • Identificar problemas de desenho e comunique com os stakeholders. • Identificar bottleneck’s. • Produzir um documento que identifique a lista de melhorias propostas • Identificar a camada e módulo a melhorar • Os recursos envolvidos • Os itens do módulo a serem revistos • Os riscos inerentes das alterações • Os ganhos de performance previstos. • O plano de transição (novo Configuration Item) de forma a albergar as alterações no deploy. • Utilize ferramentas de análise disponíveis no mercado. Por onde começar? Plan Your Dive *
  • 17. Ao identificar bottlenecks verificar se: • fluxos + relevantes afetam a performance. • uso de recursos ou computação afeta a performance. • fluxos + frequententes. • passos em que os recursos são acedidos provocando constrangimentos • computação vs localização dos recursos. • Quais os compromissos que foram feitos de forma a maximizar a performance? • Quais os componentes que estão relacionados com outros componentes e/ou recursos? • Quais são as chamadas feitas síncrona e assíncronamente? • Quanto é o trabalho de I/O e o trabalho de processamento? Identificar Bottlenecks Análise & Identificação
  • 18. Configurar & Desenvolver Dive Your Plan * • Limite as alterações às previstas na fase de análise. (Não tente optimizar tudo de uma só vez, numa só iteração) • Mantenha as alterações num repositório de source control. • Implemente as alterações incrementalmente sempre que possível. • Reveja as melhores práticas utilizadas atualmente no mercado. • Procure a ajuda de especialistas nas comunidades. • Crie um documento que reflita as alterações necessárias à futura transição para modo release. • Documente e forme a equipa em relação às melhores práticas implementadas.
  • 20. .NET Performance (CLR) • CLR - Common Language Runtime é a máquina virtual .NET • “Common” porque permite várias linguagens traduzindo-as em IL • O CLR não é um interpretador! - Ele não retraduz o código em Intermediate Language (IL) cada vez que executa um mesmo código. - O que o CLR faz é compilar código IL em código máquina antes de executá-lo – Just In Time compiling • Este processo leva algum tempo mas normalmente só precisa de ser feito 1ªvez. • Uma vez compilado o código mantém-se disponível para execução. * • Código não usado nunca é compilado JIT. • Podemos usar NGEN em vez de JIT se necessário boost na performance. • Permite optimizar as aplicações em compile time e runtime. source code C# Code VB.NET Code .NET Supported Languages source code compilation C# Compiler VB.NET Compiler Other Supported Compilers runtime compilation Native Code Common Intermediate Language (IL)
  • 21. Optimizações CLR (/optimize+ flag ) • É feita uma optimização dos fluxos do código (Branches optimization) • A optimização do compilador JIT fica também ligada. // Use /optimize+ compiling option!! void CLROptimizeExample() { int unusedVar; // unusedVars are removed int defaultCompileValue = 0; while (defaultCompileValue < 20) { try { // unreachable code is removed if (defaultCompileValue == 21) { unusedVar++; break; } }finally { /* empty finally blocks are removed*/ } try {/* empty finally blocks are removed*/ } finally { defaultCompileValue++; } try {/* witht an empty try all blocks are removed */ } catch (Exception) {throw;} } }
  • 22. Do’s em .NET Do’s Release/Análise = <compilation debug=“false"/> void DotNetBadExample() { const string _myString = "1234567890 netponto"; int i = 0; for (; i < 20; i++) { if (_myString.Length > 20 & myContains(_myString, ref i)) { i = i + 1; }}} void DotNetGoodExample() { const string _myString = "1234567890 netponto"; for (int i = 0; i < 20; i++) { if (_myString.Length > 20 && myContains(_myString, ref i)) { i += i + 1; }}} • Usar switch. • Usar Generics. ex: List<T>() em vez de ArrayList() • Manipulação de strings diferente porque são objetos imutáveis. • Sol.: Usar StringBuilder em vez de operador de concatenação: + em C#, & VB.
  • 23. Minimizar e Aggregar Do’s .CSS • Minimizado (sem espaço em branco e sem comentários) • Num ficheiro (bundling) • Remover overwrites; • Usar reduções nas propriedades • Incluir ícones como background image em vez de Image • Css sprites • Jquery em vez de Javascript tradicional • Jquery.min.{version}.js em modo Release • Link Directo em vez de ficheiro local • Utilizar Client-Side Validation • Minimizado • Usar Identificadores HTML 5 • Usar CSS classes em vez de style, • Especificar dimensões imagens. • Usar CSS para efeitos e Javascript para comportamentos. • Incluir scripts depois do markup ou assíncronos
  • 24. Reduzir interacões • Reduzir dados, markup, imagens transferidos por req. • Utilizar paginação na obtenção de grandes conjuntos de dados. • Desligue o ViewState e Session em páginas que não estiver a utilizar • Minimize o nº de objectos presentes no ViewState. • Considerar utilizar HTTP Compression. • Usar Id’s pequenos • Use JSON em vez de XML Do’s Reduzir Round Trips • Considerar usar HTTPResponse.IsClientConnected para verificar se o cliente continua ligado antes de operações pesadas no servidor. (medir para ver se melhora). • Utilize Server.Transfer em vez de Response.Redirect se possível. Reduzir Page.Size()
  • 25. Executar só se necessário Do’s • Usar e “abusar” : !Page.IsPostBack, !Page.IsCallback, !Page.IsCrossPagePostBack • Dividir a página por conteúdos de forma a aumentar a eficiência da cache e da renderização, usar UpdatePanels e Ajax • Utilize Cache’s, cuidado com os limites e use SQLInjection. • Usar a Output Cache em páginas relativamente estáticas. – Pode sempre antecipar expiração através de: HttpResponse.RemoveOutputCacheItem(“/MyPage.as px”); • Remover Módulos HTTP do Pipeline ASP:NET se não os estiver a utilizar. • (….)
  • 26. Let’s see some tricks! ASP.NET Performance Demo
  • 27. Tratar bem os Recursos Do’s • Usar StopWatch em vez de Final Datetime –Initial Datetime • Afinar a Thread Pool. • Close e/ou Dispose sempre os recursos que abriu explicitamente – e não os bloqueie ou meta em cache using(<open connection>){ } // dispose automático Configuration setting Default Recommended maxconnection 2 12 * #CPUs maxIoThreads 20 100 maxWorkerThreads 20 100 minFreeThreads 8 88 * #CPUs minLocalRequestFreeThreads 4 76 * #CPUs
  • 28. Do’s em BD’s • Escolher o .NET Data Provider correto – Evite OLEDB, System.Data.SqlClient (SQL Server), ODP.NET (Oracle), etc. • Usar Connection Pooling. • Usar Stored Procedures em vez queries. • Usar MARS (Multiple Active Result Sets). – Retorne múltiplas tabelas para dentro dum DataSet • Normalizar e redesenhar modelo dados se necessário. • Evitar Joins (Use select’s diretos em queries complexas). • Fechar sempre as ligações BD e outros recursos Pooled. • Deixar a BD em paz, Lazy Loading rocks! • Não pressuponha nada, investigue comportamento CLR, IIS, SGBD, etc.! Do’s
  • 29. Dont’s • Over Initialize. • Não chamar o garbage collector GC.Collect() e não chamar Finalizers a la C++; • Evitar o uso de exceções desnecessárias: – Para controlo de fluxo. – Especialmente exceções não geridas! Quanto + perto melhor! – Nunca apanhar uma exceção só para a lançar de seguida. – Não tenha medo de usar blocos Try Catch Finally eles não afetam a performance. • Evitar chamar Page.Bind • Minimize chamadas DataBinder.Eval, em vez disso usar Cast explícito para DataItem. • SessionState: - Evite guardar objetos STA COM - Evite guardar Session State se não o usar. Dont’s
  • 30. Testar Resultados Validar melhorias e comportamentos • Medir a comparar os valores dos indicadores iniciais, investigar outros indicadores relevantes. • Verificar se as medições estão corretas, se foram produzidas nas mesmas condições e se cumprem SLA’s. • Verificar sempre que o comportamento esperado do sistema se mantém. Teste de Carga em 5 passos Inputs: Objetivos Performance, workload, Aplicação, planos teste 1. Identificar cenários chave. 2. Identificar workload 3. Identificar métricas 4. Criar casos de teste 5. Simular carga 6. Analisar resultados Outputs: Plano de testes atualizado, capacidade máxima, comportamento com várias cargas, potenciais bottlenecks, recomendações para bottlenecks Testes de Stress Estender os testes de carga Para além dos limites impostos pelos SLA’s É uma boa ideia, especialmente em sistemas críticos. Deve-se preparar alguns testes de stress nos pontos mais críticos, i.e. que exigem uma maior disponibilidade e/ou carga.
  • 31. • Melhoramentos no carregamento de páginas: • bundling e minimização de scripts e CSS. • Capacidade de obter informação de diagnóstico de performance nos servidores e na cloud. • Melhoramentos ao nível do binding em web forms. • Capacidade de ler e escrever pedidos HTTP de forma assíncrona. • Suporte para módulos e handlers assíncronos. Novidades ASP.NET 4.5
  • 32. Wrap Up • Abordar o problema como incidente em encaminhá-lo ao longo dos processos numa metodologia de performance tuning. Know your goals in every step & Keep Track • Documente-se previamente e estabeleça objetivos e metas. Know your enemies, Know your allies & Act wisely • Desenvolver plano de melhorias e executá-lo rigorosamente, sem desvios de âmbito. Plan your Dive, Dive your Plan • A manutenção preditiva é um processo contínuo e deve ser feita desde início. • Valorize o trabalho efetuado, comunicando quantitativamente os ganhos. Improve your visibility as a performance tuning expert!
  • 33. Ainda interessado? MSDN – Performance http://msdn.microsoft.com/en-us/library/ms998549 http://msdn.microsoft.com/en-us/library/aa292152(v=vs.71).aspx http://msdn.microsoft.com/en-us/library/cc668225(v=vs.100).aspx http://msdn.microsoft.com/en-us/library/3xxk09t8(v=vs.100).aspx http://msdn.microsoft.com/en-us/library/ms178139%28v=vs.100%29.aspx 10 ASP.NET Performance and Scalability Secrets http://www.codeproject.com/Articles/23306/10-ASP-NET-Performance- and-Scalability-Secrets SQL Server Performance Monitoring and Tuning How-to Topics http://msdn.microsoft.com/en-us/library/ms187830(v=sql.105).aspx Oracle Database Performance Tuning Guide http://docs.oracle.com/cd/B13789_01/server.101/b10752/perf_overview.htm NP .Net Profiler troubleshooting-performance-issues-in-web-application
  • 34. Patrocinador “GOLD” Twitter: @PTMicrosoft http://www.microsoft.com/portugal
  • 37. Próximas reuniões presenciais • XXXVII Encontro Da Comunidade SQLPORT (PORTO) 20 Jul 2013 - 10:00 "Extended events practical cases" - Vitor Pombeiro • 24Hours da PASS - 31 Julho 12:00 Practical Performance Troubleshooting - Brent Ozar entre outros. 27/07/2013 – Julho (Lisboa) 21/09/2013 – Setembro (Lisboa) 19/10/2013 – Outubro (Lisboa) 23/11/2013 – Novembro (Lisboa) Reserva estes dias na agenda! :)