SlideShare uma empresa Scribd logo
1 de 37
Globalcode – Open4education
Arquitetura .NET
Performance é feature
Antonio Maniero
Microsoft MVP
Globalcode – Open4education
Antonio Maniero
 Engenheiro desde que nasceu, escovador de bits desde o primeiro
computador c/ 2KB de memória e tarado por eficiência e simplicidade
 Desenvolvedor generalista há 35 anos. Especialista em ERP. Sistemas
LOB rodando em dezenas de milhares de empresas de todos os portes
e setores no Brasil e exterior para milhões de usuários corporativos
 Aficionado por linguagens de programação
 Apaixonado por ensinar, compartilhar conhecimento
 MVP sem querer 
pt.stackoverflow.com/users/101/maniero
linkedin.com/in/maniero/
facebook.com/antonio.maniero.junior
twitter@manieromvp jumbo.com.br
Globalcode – Open4education
Manual da palestra
É uma degustação, depois posso oferecer mais
Não quero vender nada para você
Fundamentação é meu foco, mas não cabe aqui
Pensamento fora da caixa, contestação do status quo
Serei assertivo, mas isso não quer dizer que sei tudo
Usarei hipérboles, simplificações e generalizações
Prioridade para performance
Analise seu contexto
Globalcode – Open4education
Estado da nossa indústria
Tudo é para ontem
Eterno MVP
Discurso de modernidade
“Adoção” de tecnologias por marketing
Muita informação, pouca profundidade
Cultura das Dicas Miojo® e das “boas práticas”
Visão de curto prazo
Nova solução para o problema causado pela solução anterior
Globalcode – Open4education
Otimização
“Otimização prematura é a raiz de todo o mal”
Donald Knuth
“Os programadores gastam muito tempo
pensando ou se preocupando com a
velocidade de partes não-críticas de seus
programas, e essas tentativas de eficiência
realmente têm um forte impacto negativo
quando a depuração e a manutenção são
consideradas. Devemos esquecer as
pequenas eficiências, digamos 97% do
tempo: a otimização prematura é a raiz de
todo o mal. No entanto, não devemos deixar
passar nossas oportunidades nessa crítica de
3%”
http://web.archive.org/web/20130731202547/http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf
Globalcode – Open4education
Funcionar é diferente de estar
certo
Globalcode – Open4education
Requisitos
Globalcode – Open4education
Casos reais
209,420,973 HTTP requests to our load balancer
66,294,789 of those were page loads
1,240,266,346,053 bytes (1.24 TB) of HTTP traffic sent
569,449,470,023 bytes (569 GB) total received
3,084,303,599,266 bytes (3.08 TB) total sent
504,816,843 SQL Queries (from HTTP requests alone)
5,831,683,114 Redis hits
17,158,874 Elastic searches
3,661,134 Tag Engine requests
607,073,066 ms (168 hours) spent running SQL queries
10,396,073 ms (2.8 hours) spent on Redis hits
147,018,571 ms (40.8 hours) spent on Tag Engine requests
1,609,944,301 ms (447 hours) spent processing in ASP.Net
22.71 ms average (19.12 ms in ASP.Net) for 49,180,275 question page renders
11.80 ms average (8.81 ms in ASP.Net) for 6,370,076 home page renders
Globalcode – Open4education
Casos reais
Globalcode – Open4education
Casos reais
Qual o segredo?
Pragmatismo
Eficiência
Globalcode – Open4education
Casos reais
Por que fazem isto?
Custo
Experiência do usuário (SEO)
Globalcode – Open4education
Reinventando a roda
Globalcode – Open4education
Performance não é ser rápido
Globalcode – Open4education
Linguagens mais rápidas?
Assembly?
C ?
C++ ?
C# ?
Por que não?
Globalcode – Open4education
C# versus C++
Rico Mariani Raymond Chen
https://blogs.msdn.microsoft.com/ricom/ https://blogs.msdn.microsoft.com/oldnewthing/
09 de maio de 2005
Chinese/English dictionary
https://blogs.msdn.microsoft.com/ricom/2005/05/10/performance-quiz-6-chineseenglish-dictionary-reader/
Globalcode – Open4education
C# versus C++
Uma tradução linha-a-linha do código C++ original em C# foi executada
10 vezes mais rápido que o código C++
Foram necessárias cinco otimizações diferentes (uma delas introduziu
um bug) para que o código C++ correspondesse à velocidade do
código C# inalterado
Após a sexta otimização de Raymond, seu código C++ finalmente
venceu o código C# - porque o tempo de execução foi reduzido para
onde a sobrecarga de inicialização de 60ms do CLR fez a diferença!
Para conseguir isso, Raymond teve que escrever seu próprio:
Sistema de arquivo/io
Alocador
Mapeamento internacional
Globalcode – Open4education
C# versus C++
C# no seu início, que sequer tinha generics
Tão pouco todas as melhorias que vieram depois para melhorar a
performance
E claro, as que estão por vir (lições aprendidas no Midori/M#)
Sem as melhorias do CLR promovidas ao longo de mais de uma
década
GC e JITter na sua infância
Sem contar com os avanços que a comunidade “commitou” no CoreRT
Desconsiderando o ganho que pode ser obtido com o .NET Native
Globalcode – Open4education
Ferramenta certa
Globalcode – Open4education
Ferramenta certa
Globalcode – Open4education
Ferramenta certa
Globalcode – Open4education
Memória é barata?
8MB ~ US$ 350
Globalcode – Open4education
Memória é barata?
Meio Tamanho típico Tempo de acesso
Virtual Memory 1GB – 16GB 50 – 100 us
Physical Memory 2GB – 1TB 60 – 150 ns
3nd-Level Cache 2MB – 16MB 25 – 40 ns
2nd-Level Cache 128KB – 2MB 6 – 12 ns
1st-Level Cache 16KB – 128KB 1 – 3 ns
Registers 16 – 64 Words 0.2 – 0.5 ns
Globalcode – Open4education
Escolha seu veneno
Object
Dynamic
Cast
Síncrono
Async
Thread
Yield
Lock
Alocação desmedida
Memory leak
Eager/Lazy
Generics
Não
Pattern Matching
Async
Síncrono
Execução serial
Iterador manual
Imutável
Economia
Memory aware
Lazy/Eager
Globalcode – Open4education
Escolha seu veneno
No cache
Heap
Criando objetos
GC padrão
Inlining
JITter
checked
Verifica argumentos
Exceção
ICollection
Multi dimension
Cache
Stack
Memory Pool
GC adequado
[AgressiveInlining]
Ngen
unchecked
Contratos
Retorne erro
Array
Jagged Array
Globalcode – Open4education
Escolha seu veneno
Linked List
Dictionary/Array
O(**)
Build Strings
String
Anonynous type
Nullable
Array
double
Regex
Serialização
Generics
SortedDict/KeyedColl
O(1)
StringBuilder
MyString
Tuplas
Non-Nullable (8.0)
SIMD
decimal
Análise manual
Acesso direto
Globalcode – Open4education
Escolha seu veneno
for
LINQ
.ToList()
if
Debug
Scan coleções
Add()
new List()
IO ingênuo
/
Passar parâmetros
foreach
foreach
Último momento
switch
Release
Span<>/Pointer
AddRange()
New List(10_000_000)
4KB
>>
Passar objeto
Globalcode – Open4education
Escolha seu veneno
32 bits
64 bits
Assemblies
Regras .NET
Entity Framework
EF Core
Dapper
DB poderoso
ACID/CAP
ASP.NET
ASP.NET MVC
64 bits
32 bits
Assembly único
Minhas regras
EF Core
Dapper
Sem ORM
DB leve
CAP/ACID
ASP.NET MVC
ASP.NET Core
Globalcode – Open4education
Escolha seu veneno
ASP.NET Core
.NET Full
.NET Core
ASP.NET MVC
IIS
Microsserviços
SOAP
RESTy
TCP
VS Community/Pro
Otimização
Manual?!?!? Nancy?!?
.NET Core
.NET Native
WebAPI/Blazor
Nativo (OWIN)
Monolítico
RESTy
TCP/UDP
IPC (Pipes/MMap)
VS Enterprise
Perfilamento
Globalcode – Open4education
Escolha seu veneno
OOP
Abstração
Encapsulamento
virtual
class
Cópia
Boxing
Reflexão
Runtime
Patterns
Domain Drive Dev.
Composição
Mecanismo concreto
Acesso direto
Non-virtual/static
[ref] struct
Referência
-----------
Gerador de Código
Compile Time
Library/Scaffolding
Data Driven Develop.
Globalcode – Open4education
Profilers
Globalcode – Open4education
Entenda o que está fazendo
Antonio Maniero
“Enquanto você não souber o que cada
caractere do seu código faz, até mesmo o
espaço em branco, você ainda não sabe
programar”
Globalcode – Open4education
Sugestões
Globalcode – Open4education
Ainda não acabou!
Não acredite em tudo que chega até você
Incluindo esta palestra
Questione tudo! Mas não entre em paranoia 
Procure visões diferentes
Uma “mentira” repetida mil vezes não a faz verdadeira
Só porque deu certo para alguém não significa que serve
para você
Atenção ao contexto!
Globalcode – Open4education
Contexto
Contexto
Contexto
Globalcode – Open4education
Não encerramos aqui
Me procurem, me sigam, me adicionem,
perguntem, interajam, façam networking
Gostaram? Querem mais?
Me convidem para seus eventos
Peçam uma palestra minha no seu evento preferido
Obrigado
pt.stackoverflow.com/users/101/maniero
linkedin.com/in/maniero/
twitter@manieromvp
pt.quora.com/profile/Antonio-Maniero
facebook.com/antonio.maniero.junior
github/.com/maniero
instagram.com/antoniomaniero
https://www.youtube.com/channel/UC5YAwQ1c11r_XPEnPw5B1dg
Antonio Maniero
TDC2018SP | Trilha Arq .Net - Performance e feature

Mais conteúdo relacionado

Mais procurados

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
 
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
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 
Gestão da Automação TDC Floripa 2018
Gestão da Automação TDC Floripa 2018Gestão da Automação TDC Floripa 2018
Gestão da Automação TDC Floripa 2018Ernesto Barbosa
 
Service virtualization floripa
Service virtualization floripaService virtualization floripa
Service virtualization floripaErnesto Barbosa
 
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.tdc-globalcode
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funcionaRodrigo Serradura
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTaise Dias da Silva
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberCamilo Lopes
 
GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...
GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...
GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...Pedro Moreira da Silva
 
Machucando o código - Técnicas para escrever um código com uma maior legibil...
Machucando o código - Técnicas para escrever um código com uma maior legibil...Machucando o código - Técnicas para escrever um código com uma maior legibil...
Machucando o código - Técnicas para escrever um código com uma maior legibil...Vinícius Krolow
 
Incluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no PipelineIncluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no PipelineClaudio Romao
 

Mais procurados (19)

Bdd&tdd
Bdd&tddBdd&tdd
Bdd&tdd
 
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
 
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
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
Gestão da Automação TDC Floripa 2018
Gestão da Automação TDC Floripa 2018Gestão da Automação TDC Floripa 2018
Gestão da Automação TDC Floripa 2018
 
Service virtualization floripa
Service virtualization floripaService virtualization floripa
Service virtualization floripa
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
TDC2018SP | Trilha Kotlin - Kodando com Kotlin aplicacoes front-end.
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funciona
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...
GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...
GitLab Pajamas Design System (2022-01-20 @ “Design systems tratados por tu” p...
 
Machucando o código - Técnicas para escrever um código com uma maior legibil...
Machucando o código - Técnicas para escrever um código com uma maior legibil...Machucando o código - Técnicas para escrever um código com uma maior legibil...
Machucando o código - Técnicas para escrever um código com uma maior legibil...
 
Refatorar é preciso! 2.0
Refatorar é preciso! 2.0Refatorar é preciso! 2.0
Refatorar é preciso! 2.0
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Incluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no PipelineIncluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no Pipeline
 

Semelhante a TDC2018SP | Trilha Arq .Net - Performance e feature

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
 
Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Leandro Moreira
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...tdc-globalcode
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkFlávio Lisboa
 
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosTDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosStefan Teixeira
 
Resumo do TheDeveloperConference 2014 - POA
Resumo do TheDeveloperConference 2014 - POAResumo do TheDeveloperConference 2014 - POA
Resumo do TheDeveloperConference 2014 - POARafael Pacheco
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsRenato Groff
 
QCon 2011
QCon 2011QCon 2011
QCon 2011Ismael
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosRafael Chaves
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
The Developers Conference 2014 | Porto Alegre
The Developers Conference 2014 | Porto AlegreThe Developers Conference 2014 | Porto Alegre
The Developers Conference 2014 | Porto AlegreBruno Brandes
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaJosé Roberto Araújo
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 

Semelhante a TDC2018SP | Trilha Arq .Net - Performance e feature (20)

TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosTDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
 
Resumo do TheDeveloperConference 2014 - POA
Resumo do TheDeveloperConference 2014 - POAResumo do TheDeveloperConference 2014 - POA
Resumo do TheDeveloperConference 2014 - POA
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application Insights
 
QCon 2011
QCon 2011QCon 2011
QCon 2011
 
Novidades do C#6
Novidades do C#6 Novidades do C#6
Novidades do C#6
 
Novidades do c#6
Novidades do c#6Novidades do c#6
Novidades do c#6
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutos
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Revolução Go TDC 2016
Revolução Go TDC 2016Revolução Go TDC 2016
Revolução Go TDC 2016
 
Introducao XP
Introducao XPIntroducao XP
Introducao XP
 
The Developers Conference 2014 | Porto Alegre
The Developers Conference 2014 | Porto AlegreThe Developers Conference 2014 | Porto Alegre
The Developers Conference 2014 | Porto Alegre
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejista
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 

Mais de tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxLeonardoGabriel65
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasSocorro Machado
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosLucianoPrado15
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptPedro Luis Moraes
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioDomingasMariaRomao
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAHELENO FAVACHO
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxReinaldoMuller1
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeitotatianehilda
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfHELENO FAVACHO
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffNarlaAquino
 

Último (20)

Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medio
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 

TDC2018SP | Trilha Arq .Net - Performance e feature

  • 1. Globalcode – Open4education Arquitetura .NET Performance é feature Antonio Maniero Microsoft MVP
  • 2. Globalcode – Open4education Antonio Maniero  Engenheiro desde que nasceu, escovador de bits desde o primeiro computador c/ 2KB de memória e tarado por eficiência e simplicidade  Desenvolvedor generalista há 35 anos. Especialista em ERP. Sistemas LOB rodando em dezenas de milhares de empresas de todos os portes e setores no Brasil e exterior para milhões de usuários corporativos  Aficionado por linguagens de programação  Apaixonado por ensinar, compartilhar conhecimento  MVP sem querer  pt.stackoverflow.com/users/101/maniero linkedin.com/in/maniero/ facebook.com/antonio.maniero.junior twitter@manieromvp jumbo.com.br
  • 3. Globalcode – Open4education Manual da palestra É uma degustação, depois posso oferecer mais Não quero vender nada para você Fundamentação é meu foco, mas não cabe aqui Pensamento fora da caixa, contestação do status quo Serei assertivo, mas isso não quer dizer que sei tudo Usarei hipérboles, simplificações e generalizações Prioridade para performance Analise seu contexto
  • 4. Globalcode – Open4education Estado da nossa indústria Tudo é para ontem Eterno MVP Discurso de modernidade “Adoção” de tecnologias por marketing Muita informação, pouca profundidade Cultura das Dicas Miojo® e das “boas práticas” Visão de curto prazo Nova solução para o problema causado pela solução anterior
  • 5. Globalcode – Open4education Otimização “Otimização prematura é a raiz de todo o mal” Donald Knuth “Os programadores gastam muito tempo pensando ou se preocupando com a velocidade de partes não-críticas de seus programas, e essas tentativas de eficiência realmente têm um forte impacto negativo quando a depuração e a manutenção são consideradas. Devemos esquecer as pequenas eficiências, digamos 97% do tempo: a otimização prematura é a raiz de todo o mal. No entanto, não devemos deixar passar nossas oportunidades nessa crítica de 3%” http://web.archive.org/web/20130731202547/http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf
  • 6. Globalcode – Open4education Funcionar é diferente de estar certo
  • 8. Globalcode – Open4education Casos reais 209,420,973 HTTP requests to our load balancer 66,294,789 of those were page loads 1,240,266,346,053 bytes (1.24 TB) of HTTP traffic sent 569,449,470,023 bytes (569 GB) total received 3,084,303,599,266 bytes (3.08 TB) total sent 504,816,843 SQL Queries (from HTTP requests alone) 5,831,683,114 Redis hits 17,158,874 Elastic searches 3,661,134 Tag Engine requests 607,073,066 ms (168 hours) spent running SQL queries 10,396,073 ms (2.8 hours) spent on Redis hits 147,018,571 ms (40.8 hours) spent on Tag Engine requests 1,609,944,301 ms (447 hours) spent processing in ASP.Net 22.71 ms average (19.12 ms in ASP.Net) for 49,180,275 question page renders 11.80 ms average (8.81 ms in ASP.Net) for 6,370,076 home page renders
  • 10. Globalcode – Open4education Casos reais Qual o segredo? Pragmatismo Eficiência
  • 11. Globalcode – Open4education Casos reais Por que fazem isto? Custo Experiência do usuário (SEO)
  • 14. Globalcode – Open4education Linguagens mais rápidas? Assembly? C ? C++ ? C# ? Por que não?
  • 15. Globalcode – Open4education C# versus C++ Rico Mariani Raymond Chen https://blogs.msdn.microsoft.com/ricom/ https://blogs.msdn.microsoft.com/oldnewthing/ 09 de maio de 2005 Chinese/English dictionary https://blogs.msdn.microsoft.com/ricom/2005/05/10/performance-quiz-6-chineseenglish-dictionary-reader/
  • 16. Globalcode – Open4education C# versus C++ Uma tradução linha-a-linha do código C++ original em C# foi executada 10 vezes mais rápido que o código C++ Foram necessárias cinco otimizações diferentes (uma delas introduziu um bug) para que o código C++ correspondesse à velocidade do código C# inalterado Após a sexta otimização de Raymond, seu código C++ finalmente venceu o código C# - porque o tempo de execução foi reduzido para onde a sobrecarga de inicialização de 60ms do CLR fez a diferença! Para conseguir isso, Raymond teve que escrever seu próprio: Sistema de arquivo/io Alocador Mapeamento internacional
  • 17. Globalcode – Open4education C# versus C++ C# no seu início, que sequer tinha generics Tão pouco todas as melhorias que vieram depois para melhorar a performance E claro, as que estão por vir (lições aprendidas no Midori/M#) Sem as melhorias do CLR promovidas ao longo de mais de uma década GC e JITter na sua infância Sem contar com os avanços que a comunidade “commitou” no CoreRT Desconsiderando o ganho que pode ser obtido com o .NET Native
  • 21. Globalcode – Open4education Memória é barata? 8MB ~ US$ 350
  • 22. Globalcode – Open4education Memória é barata? Meio Tamanho típico Tempo de acesso Virtual Memory 1GB – 16GB 50 – 100 us Physical Memory 2GB – 1TB 60 – 150 ns 3nd-Level Cache 2MB – 16MB 25 – 40 ns 2nd-Level Cache 128KB – 2MB 6 – 12 ns 1st-Level Cache 16KB – 128KB 1 – 3 ns Registers 16 – 64 Words 0.2 – 0.5 ns
  • 23. Globalcode – Open4education Escolha seu veneno Object Dynamic Cast Síncrono Async Thread Yield Lock Alocação desmedida Memory leak Eager/Lazy Generics Não Pattern Matching Async Síncrono Execução serial Iterador manual Imutável Economia Memory aware Lazy/Eager
  • 24. Globalcode – Open4education Escolha seu veneno No cache Heap Criando objetos GC padrão Inlining JITter checked Verifica argumentos Exceção ICollection Multi dimension Cache Stack Memory Pool GC adequado [AgressiveInlining] Ngen unchecked Contratos Retorne erro Array Jagged Array
  • 25. Globalcode – Open4education Escolha seu veneno Linked List Dictionary/Array O(**) Build Strings String Anonynous type Nullable Array double Regex Serialização Generics SortedDict/KeyedColl O(1) StringBuilder MyString Tuplas Non-Nullable (8.0) SIMD decimal Análise manual Acesso direto
  • 26. Globalcode – Open4education Escolha seu veneno for LINQ .ToList() if Debug Scan coleções Add() new List() IO ingênuo / Passar parâmetros foreach foreach Último momento switch Release Span<>/Pointer AddRange() New List(10_000_000) 4KB >> Passar objeto
  • 27. Globalcode – Open4education Escolha seu veneno 32 bits 64 bits Assemblies Regras .NET Entity Framework EF Core Dapper DB poderoso ACID/CAP ASP.NET ASP.NET MVC 64 bits 32 bits Assembly único Minhas regras EF Core Dapper Sem ORM DB leve CAP/ACID ASP.NET MVC ASP.NET Core
  • 28. Globalcode – Open4education Escolha seu veneno ASP.NET Core .NET Full .NET Core ASP.NET MVC IIS Microsserviços SOAP RESTy TCP VS Community/Pro Otimização Manual?!?!? Nancy?!? .NET Core .NET Native WebAPI/Blazor Nativo (OWIN) Monolítico RESTy TCP/UDP IPC (Pipes/MMap) VS Enterprise Perfilamento
  • 29. Globalcode – Open4education Escolha seu veneno OOP Abstração Encapsulamento virtual class Cópia Boxing Reflexão Runtime Patterns Domain Drive Dev. Composição Mecanismo concreto Acesso direto Non-virtual/static [ref] struct Referência ----------- Gerador de Código Compile Time Library/Scaffolding Data Driven Develop.
  • 31. Globalcode – Open4education Entenda o que está fazendo Antonio Maniero “Enquanto você não souber o que cada caractere do seu código faz, até mesmo o espaço em branco, você ainda não sabe programar”
  • 33. Globalcode – Open4education Ainda não acabou! Não acredite em tudo que chega até você Incluindo esta palestra Questione tudo! Mas não entre em paranoia  Procure visões diferentes Uma “mentira” repetida mil vezes não a faz verdadeira Só porque deu certo para alguém não significa que serve para você Atenção ao contexto!
  • 35. Globalcode – Open4education Não encerramos aqui Me procurem, me sigam, me adicionem, perguntem, interajam, façam networking Gostaram? Querem mais? Me convidem para seus eventos Peçam uma palestra minha no seu evento preferido Obrigado