Conheça a classe Lazy do C# e ganhe mais performance e memória
Como utilizar a classe Lazy no C#
Quem nunca teve problemas com performance em seu código que atire a primeira pedra!
Resolvi escrever esse post com o intuito de ajudar melhorar e muito a performance de seu código.
Irei indicar o uso de uma classe chamada Lazy que é pouco explorada pelos desenvolvedores e que pode trazer uma certa diferença em seu produto final.
Bom chega de blá blá blá e vamos ao que interessa!
Classe Lazy
A classe Lazy tem por objetivo retardar uma nova instância de um objeto, ou seja, se você estiver acessando a propriedade de um objeto que usa o Lazy, o objeto só será criado quando você acessar o método Value.
Imagine um objeto que tem várias propriedades, e algumas dessas propriedades são objetos complexos que tem várias outras propriedades complexas, mas no momento que você ta acessando o objeto principal você quer pegar apenas uma informação simples do próprio objeto principal e não quer carregar a instancia das propriedades que possuem o objeto complexo, ai entra o Lazy em ação.
Podemos ter acesso a classe Lazy no seguinte namespace System.Lazy
Vamos ver um exemplo prático:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //Criei uma instancia da categoria Categoria c = new Categoria(); //Setei um valor para a propriedade NomeCategoria, mas não setei nada para o usuário c.NomeCategoria = "Transporte"; //Imprimo o valor da propriedade NomeCategoria Console.WriteLine("Obtem nome da instancia da Categoria = " + c.NomeCategoria); //Verifico se a propriedade UsuarioCadastro foi instanciada através do método IsValueCreated Console.WriteLine("UsuarioCadastroInstanciado = " + c.UsuarioCadastro.IsValueCreated); //Invoco a propriedade do usuário através do Value Console.WriteLine("Resgato o valor da propriedade do usuario"); Console.WriteLine("Obtem nome da instancia do UsuarioCadastro = " + c.UsuarioCadastro.Value.Nome); //Verifico se a propriedade UsuarioCadastro foi instanciada através do método IsValueCreated Console.WriteLine("UsuarioCadastroInstanciado = " + c.UsuarioCadastro.IsValueCreated); //Fecho o prompt após pressionar uma tecla Console.ReadKey(); } public class Categoria { public Lazy<Usuario> UsuarioCadastro { get; set; } public string NomeCategoria { get; set; } public Categoria() { this.UsuarioCadastro = new Lazy<Usuario>(); } } public class Usuario { public Usuario() { this.Nome = "Paulo Rogério"; } public string Nome { get; set; } } } } |
Veja o resultado:
Como podemos observar o objeto Usuario só será instanciado caso invocamos a propriedade UsuarioCadastro da categoria através do Value, com isso você consumirá menos memória e ganhará performance.
Acesse o exemplo no meu GitHub clicando aqui
Se você conhece alguma classe interessante, compartilhe conosco através do comentário.
Participe do nosso Slack clicando no link abaixo e tire suas dúvidas:
https://ilovecodeteam.herokuapp.com/
Não esqueça de curtir nossa fanpage, nosso canal no youtube e participar do nosso grupo do Facebook.
About author
You might also like
Como programar em Python, sem saber Python!
Share this on WhatsAppComo programar em Python, sem saber Python! Esse é o meu primeiro post aqui no I Love Code. Obrigado ao Paulo pelo espaço. Muito Obrigado. Porque estou
Gerando uma lista utilizando Xamarin
Share this on WhatsAppVeja nesse artigo como criar uma lista utilizando Xamarin.Android Nesse exemplo estarei utilizando Xamarin voltado para o desenvolvimento nativo em Android. Precisaremos adicionar ao nosso layout um
Como crio Robôs para WhatsApp
Share this on WhatsAppFala Dev,hoje resolvi trazer um post um pouco diferente, irei tentar responder uma pergunta muito frequente que eu recebo todos os dias. Como eu crio robôs para
0 Comments
No Comments Yet!
You can be first to comment this post!