Arquivo mensais:setembro 2010

Quick Dev: Connection Pooling

Como funciona um pool de conexões

Como funciona um pool de conexões. Fonte: http://download.oracle.com/docs/cd/B13789_01/appdev.101/a97269/pc_11thr.htm

Olá pessoal! 

Continuando a série Quick Dev, neste artigo vou falar um pouco sobre pooling de conexões em uma aplicação .NET. 

Para começar, a seguir temos uma definição simples de pool de conexões: trata-se de um cache de conexões de banco de dados, mantidas de forma que possam ser reutilizadas quando futuras requisições são necessárias. Em uma aplicação .NET onde sucessivamente abrimos conexões com a base de dados, realizamos as operações necessárias e por fim fechamos a conexão, o pool de conexões é extremamente importante, pois, poupa o tempo que seria necessário para a abertura de novas conexões a cada operação. 

O pool de conexões é dividido por processo, application domain e connection string. Ou seja, suas conexões serão reaproveitadas desde que sejam requisitadas por um mesmo processo, por um mesmo application domain (no .NET é possível criar diversos applications domains dentro de um mesmo processo) e por uma mesma string de conexão, sendo esta a mais importante. Se a sua aplicação utiliza conexão standard e varia o usuário de acordo com o usuário que a está utilizando, o pool de conexões será aproveitado apenas para aquele mesmo usuário, o que implica em ter um pool de conexão para cada usuário conectado. O mesmo vale para conexões windows integrated, pois, apesar da string de conexão ser a mesma, o usuário difere em cada conexão. O cenário que permite maior aproveitamento do pool é o de aplicações que utilizam conexão standard com usuário único. Note que cada abordagem possui implicações de segurança diferentes, não cabendo a este artigo o seu detalhamento. 

Conceituado o pool, vamos a algumas opções que temos para manipulá-lo via connection string (podem não ser aplicáveis a algumas bases de dados): 

  • ConnectionLifeTime: Tempo em segundos para que uma conexão permaneça ativa no pool;
  • MaxPoolSize: Número máximo de conexões presentes no pool;
  • MinPoolSize: Número mínimo de conexões presentes no pool. Esta configuração é interessante, pois, permite que você crie um determinado número de conexões ativas no pool na primeira abertura de conexão que sua aplicação realizar, de forma que outros usuários possam se beneficiar destas conexões no momento em que começarem a utilizarem a aplicação.
  • Pooling: Permite ativar ou desativar a utilização do pool. A boa notícia é que por padrão o valor desta configuração é true;

Além das opções via connection string, temos também alguns métodos que podem ser invocados através do objeto de conexão (SQLConnection, por exemplo), que são úteis quando se sabe que uma determinada conexão não será mais utilizada, e portanto, não precisa ser disponibilizada no pool: 

  • ClearAllPools: Limpa todos os pools de conexão para um provedor em específico;
  • ClearPool: Limpa o pool de conexão associado à conexão especificada;
  • ReleaseObjectPool: Indica que o objeto pode ser liberado do pool assim que a última conexão for finalizada;

E assim finalizamos mais um Quick Dev. Para mais informações a respeito deste assunto, consulte a documentação da Microsoft disponível em: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx 

Quick Dev: Formulários não-retangulares

Formulário não retangular em execução

Formulário não retangular em execução

Olá pessoal!

Este é o primeiro post de uma nova sessão denominada “Quick Dev”. O objetivo desta sessão é explorar rapidamente algumas abordagens de desenvolvimento simples, porém, úteis.   

Se você está se perguntando neste momento: porque estamos abordando questões de desenvolvimento em um blog de arquitetura? Eu recomendo ler o texto de John Davies (não errei na escrita, é Davies mesmo) no livro “97 Things Every Software Architect Should Know”, entitulado como “Architects Must Be Hands On”, onde ele brilhantemente afirma: “Without a good understanding of the full range of technology, an architect is little more than a project manager”.   

Sem mais explicações, vamos ao que interessa. Você sabia que é possível criar formulários não retangulares em uma aplicação windows forms? Pois é, você pode criar um formulário no formato que desejar. Veja a seguir como o código é simples e ao lado o resultado. Note que alterei a cor de fundo do formulário e que acrescentei um botão para fechar, uma vez que os controles padrão do formulário não aparecem neste formato.     

Public Class NonRetangularForm

    Private Sub NonRetangularForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Cria-se um objeto path
        Dim myPath As New System.Drawing.Drawing2D.GraphicsPath
        'Adiciona-se o formato desejado ao Path. Este formato pode ser um polígono,
        'formato de pizza, elipse, e diversos outros formatos interessantes.
        myPath.AddEllipse(0, 0, Me.Width, Me.Height)
        'Cria-se uma região com base no formato criado
        Dim myRegion As New Region(myPath)
        'Associa-se a região ao formulário, fazendo com que ele
        'assuma a região defina no objeto no seu carregamento.
        Me.Region = myRegion
    End Sub

    Private Sub btnFechar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles brnFechar.Click
        Me.Close()
    End Sub

End Class