Foreground threads e Background threads

O CLR considera que existem dois tipos de threads: foreground e background threads.

Foreground threads executam com uma prioridade elevada. Esse tipo de thread evita que a aplicação se encerre antes que tenham executado todo o seu trabalho.

Em contraponto, as background threads não são executadas com prioridade elevada. Background threads são finalizada imediatamente pelo CLR assim que todas as foreground threads de uma aplicação (leia managed assembly) encerram sua execução, sem lançar nenhuma exceção.

Leia mais »

Publicidade

O Garbage Collector e seu funcionamento…

Sem o garbage collector seu código não seria como ele é hoje. Provavelmente você se preocuparia muito mais com o consumo de recursos e descarte de instâncias de objetos não mais utilizadas. Também é fato que pouco se pensa sobre o funcionamento do garbage collector. Este post visa destacar brevemente o funcionamento do garbage collector.

clip_image001

Leia mais »

Delegate Chain Invocation

Callback functions são blocos de código executável que são passados como parâmetro para outro código, que fica responsável por invocá-los quando apropriado.

O modo como callback functions são suportados em cada linguagem de programação é diferente, mas são frequentemente implementados como subrotinas, expressões lambdas ou ponteiros de função.

O tratamento das linguagens não-gerenciadas sobre os callback functions é limitada a apenas um endereço de memória. Este endereço de memória não contém nenhuma informação adicional sobre o tipo de retorno, o número de parâmetros ou os tipos de dados dos parâmetros.

Leia mais »

Gerando registros de log automáticos com o Entity Framework

Uma tarefa bastante recorrente durante o desenvolvimento de sistemas é a criação de rotinas de log. E o Entity Framework facilita a nossa vida quando temos de fazer isso.

Com o Entity Framework podemos criar uma customização que encapsule os comandos que serão enviados para o banco de dados e então adicionar uma lógica que gere os registros de log necessários para cada operação.

log de dados

Leia mais »

Construindo camadas de acesso a dados – Parte V – Unity of Work

O padrão Unit of Work mantém um rastreamento sobre todas as alterações que possam alterar sua fonte de dados durante uma transação. Assim, quando todas as alterações já tiverem sido executadas o padrão fica responsável por persistir todas na fonte de dados.

Geralmente, não somos responsáveis por implementar este padrão, acabamos por consumi-lo em ferramentas de persistência, como: Entity Framework, NHibernate e LINQ to SQL.

Leia mais »

Construindo camadas de acesso a dados – Parte II – Identity Field

Dentro dos diferentes patterns de criação de camadas de acesso dados alguns deles não estão diretamente associados à construção de nossos repositórios, mas estão associados com a adequação da estrutura de nossas entidades a um determinado objetivo.

Este post é sobre um pattern chamado Identity Field.

O padrão Identity Field instrui a utilização de uma propriedade que funcione como chave de identificação de cada entidade das demais, independente do seu tipo de dados, tabela na qual estão salvos ou estrutura.

O objetvo desta chave de identificação é basicamente funcionar como identificador global, que ao contrário dos valores de campos que são chaves primárias (que geralmente são baseados em tipos inteiros, auto-incrementais e que podem se repetir em outras tabelas), agregue uma identificação única daquela tupla no banco de dados e no sistema.

Leia mais »

Construindo camadas de acesso a dados

A principal motivação para o uso de uma camada de acesso a dados (data access layer, DAL) em nossa aplicação é manter os códigos (e as tecnologias) de acesso a dados encapsulados em uma camada que fique responsável por comunicar-se com a fonte de dados, persistindo e recuperando dados de nossas entidades.

Uma camada de acesso a dados deve fornecer recursos para criação, leitura, atualização e exclusão de dados, além de controles de transação, segurança, mapeamento, concorrência, e outros. A sua criação favorece o uso de uma administração centralizada que separa o comportamento da camada de negócios das lógicas de acesso a fontes de dados e serviços.

data-net

Leia mais »

Um modelo arquitetural…

Nos últimos tempos tenho recebido algumas perguntas de como modelo meus projetos, quais design patterns utilizo e como divido minha aplicação em camadas. Estas perguntas possuem apenas uma resposta: depende do caso.

Cada aplicação merece um modelo arquitetural diferente do outro. Cada aplicação exige diferentes design patterns. Cada aplicação funciona de um jeito. Nenhuma aplicação é igual a outra, assim como os dedos das mãos não são iguais.

Mas, como esta pergunta não possui uma resposta certa ou errada, gostaria de demonstrar um modelo arquitetural que me agrada bastante. Este modelo mescla alguns design patterns e alguns princípios de projetos orientados a objetos. A arquitetura da aplicação é a demonstrada abaixo.

architecture

Leia mais »

Computação Paralela – Paralelismo com C#

Provavelmente você já deve ter ouvido falar sobre processamento paralelo, paralelismo ou computação paralela. Todos estes termos se referem à forma de computação na qual vários cálculos são realizados simultaneamente, resolvidos de forma separada e concorrente (em paralelo).

A computação paralela é utilizada há muitos anos, principalmente em cenários de alto desempenho que exigem processamento pesado.

final-logo-par-72dpi

Leia mais »