A Microsoft tem feito um grande esforço para melhorar a performance de aplicações .NET e, por isso, tem tratado alocações de objetos em memória com muito carinho. Exemplo disso, é o surgimento da classe ArrayPool. A classe ArrayPool evita que criemos frequentemente arrays que são usados em um curto período de tempo e, então, descartados. […]
Structure and Interpretation of Computer Programs
O excelente livro “Structure and Interpretation of Computer Programs” apresenta de forma bastante claro conceitos fundamentais para o desenvolvimento de software. Além disso, é uma das melhores referências que conheço para aqueles interessados em aprender programação funcional. Embora os códigos apresentados estejam em Scheme, os conceitos introduzidos são aplicáveis em qualquer linguagem de programação e […]
ValueTuple vs Tuple
C# possui dois tipos diferentes para tuplas: ValueTuple e Tuple. O primeiro, ValueTuple, é uma struct e, por isso, por padrão, tem suas instâncias na stack. O segundo, Tuple, é uma classe e, por isso, tem suas instâncias na heap. Tuple surgiu primeiro. ValueTuple veio depois para permitir ganhos de performance. Tuple e ValueTuple na […]
Por que utilizar bons modelos (diagramas) é importante para arquitetura de software?
Software em funcionamento é mais relevante que documentação abrangente. Concordamos com esse princípio expresso no manifesto ágil. Entretanto, entendemos que ele foi interpretado e utilizado de forma infeliz, como justificativa, por tempo demais, para decisões arbitrárias que levaram a um incremento no custo de desenvolvimento e manutenção de software. Documentação abrangente é fundamental para redução […]
Implementando um EventBus com RabbitMQ em C#
Neste post mostro como implementar um EventBus, utilizando RabbitMQ, em C#. Esta implementação é uma adaptação da entregue pela Microsoft no projeto eShopOnContainers (semelhanças não são mera coincidência). O que é um EventBus? De forma simplificada, um EventBus é um artefato de software que permite que um componente publique notificações (eventos) indicando a ocorrência de […]
Introdução prática ao Apache NiFi
Sabemos que é inevitável que diferentes áreas da empresa busquem e utilizem mais de uma solução de software, com frequência desenvolvidas por mais de um fornecedor. Entretanto, para evitar desperdícios e erros, é fundamental que essas soluções funcionem de maneira integrada. Neste post, apresentamos o NiFi, compartilhando alguns de seus conceitos fundamentais, além de algumas […]
Como o compilador entende o “foreach” em C#
No post de hoje, gostaríamos de demonstrar como os compiladores de C# (tanto o Roslyn, que converte o código C# em Intermediate Language, quanto o JIT, que converte o código em Intermediate Language em assembly) tratam uma instrução que usamos com muita frequência: o foreach. Iremos abordar alguns cenários de uso: Usando foreach para iterar […]
QUESTÃO: Por que o depurador não respeita meu breakpoint?
Veja o código na figura que segue: Como pode ver, temos dois breakpoints. Além disso, estamos compilando em Release. Quando depuramos esse código, o breakpoint na primeira função é respeitado. Na segunda função, não. EDIÇÃO: Esse comportamento pode variar dependendo do ambiente operacional e da versão do .NET que você está utilizando. O que está […]
Just enough software architecture
“Just enough software architecture”, de George Fairbanks, compartilha uma abordagem pragmática e muito efetiva para a prática da arquitetura de software. Foi nesse livro eu, Elemar, me deparei com o conceito de risk-driven architecture – uma abordagem que prescreve que o esforço e o rigor relacionado as atividades de arquitetura devem ser justificados pelo […]
Improving the performance of .NET applications using well implemented Value Types
In this post, let’s talk about how to implement Value Types correctly and improve the performance of your applications. The examples are adapted from the book Pro .NET Performance. I tried to make it more realistic considering that I spent almost 20 years writing Point3 types. Class or Struct? Whenever you create a new type, […]