Guia Linguagem C#

Benefícios das listas genéricas no .Net - Revista Easy .Net Magazine 28

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Neste artigo serão apresentados os benefícios da utilização de listas genéricas no .NET, com uma explicação prévia de conceitos fundamentais para a compreensão deste recurso.

Artigo do tipo Tutorial
Recursos especiais neste artigo:
Contém nota Quickupdate.
Listas genéricas
Neste artigo serão apresentados os benefícios da utilização de listas genéricas no .NET, com uma explicação prévia de conceitos fundamentais para a compreensão deste recurso. Começaremos falando sobre a memória da aplicação para então abordarmos os conceitos de value type e reference type, dando todo o embasamento necessário para a compreensão dos recursos de boxing e unboxing. A partir daí detalharemos o uso das listas genéricas, que são usadas para armazenamento de objetos em memória, desde a sua conceituação até a sua implementação, através de um exemplo prático e objetivo onde construiremos um cadastro de pessoas em memória fazendo uso de diversos métodos da classe List.


Em que situação o tema é útil

Este tema é útil para qualquer projeto de software que venha a fazer uso de listas de objetos em memória, auxiliando o desenvolvedor na compreensão do funcionamento e dos recursos disponíveis para manipulação de listas, podendo ser utilizado, como por exemplo, para a criação de cache de objetos em memória, possibilitando o aumento da performance da aplicação.

Tradicionalmente no desenvolvimento de software nós temos a necessidade de trabalhar com estruturas de dados que agrupam uma série de elementos. Inicialmente, nos tempos da programação estruturada, nós tínhamos à nossa disposição apenas os arrays, que nos permitiam armazenar informações dentro de uma estrutura indexada que fornecia métodos básicos para inserir, remover e recuperar tais informações.

Com a chegada da orientação a objetos este cenário mudou e diversas implementações surgiram para trabalharmos com listas de objetos. Tais objetos passaram a ser disponibilizados diretamente pelas APIs das principais linguagens, como .NET e Java.

Lista é uma relação de objetos que podem representar Pessoas, Carros, Bicicletas, tipos Inteiros, Strings, Decimais, dentre outros, ou seja, elas permitem que uma lista de objetos seja armazenada e manipulada em memória.

Antes de entrarmos no mérito das listas, vamos ver melhor alguns conceitos fundamentais para a compreensão das mesmas.

Memória do Computador X Memória da Aplicação

A memória do computador é o local físico onde são alocados as instruções e dados utilizados pelos processos em execução na máquina. Em operação normal, esta memória contém partes do sistema operacional e algumas aplicações que estão sendo executadas.

A memória da aplicação é uma porção da memória do computador alocada pelo sistema operacional para rodar determinada aplicação. Essa memória está dividida em duas partes, Stack e Heap, conforme mostra a Figura 1.

Figura 1. Ilustração da divisão da memória da aplicação

O espaço da stack é onde ficam registradas as variáveis declaradas em nosso sistema. O local onde o conteúdo desta variável será armazenado vai depender se esta variável é de um value type ou um reference type.

Tipos de Dados por Valor (value type)

Uma variável declarada como um tipo de dados por valor é estruturada na memória para conter um valor diretamente, ou seja, quando declaramos variáveis do tipo int, string, char, byte e todos os tipos que derivam de System.ValueType, o valor destas variáveis fica alocado diretamente na Stack, sem overhead (sobrecarga) de busca na heap, fazendo com que os mesmos sejam mais leves, conforme podemos observar na Figura 2.

Figura 2. Exemplo de alocação de value type

Tipos de Dados por Referência

Uma variável declarada como um tipo de dados por referência é estruturada para conter uma referência para um objeto existente na Heap, ou seja, quando criamos um tipo através de palavras reservadas (Class, interface, array, delegate, etc.) estamos criando um tipo de referência. Estes ficam localizados na memória Heap quando instanciados e criam um endereço na Stack que aponta para um determinado local na Heap onde estará o objeto. Quando um objeto desse tipo perde a referência o Garbage Collector entra em ação para que não tenhamos objetos perdidos na Heap. Na Figura 3 temos um exemplo de alocação de uma variável de um reference type.

Figura 3. Exemplo de alocação de um reference type

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?