Pergunta

Eu tenho vários métodos que lidam com DB e todos eles começam chamando

FaierDbDataContext db = new FaierDbDataContext();

Uma vez que o Linq2Sql DataContext objeto implementa IDisposable, isso deve ser usado com "usando"?

using (FaierDbDataContext db = new FaierDbDataContext()) {
    // use db here
}

Quais são as implicações do uso de um jeito ou de outro?

Foi útil?

Solução

Ao contrário da maioria dos tipos que implementam IDisposable, DataContext não realmente precisa descartar - pelo menos não na maioria dos casos. Eu perguntei Matt Warren sobre esta decisão design, e aqui foi sua resposta:

Existem algumas razões que implementamos IDisposable:

  • Se as necessidades lógicas aplicativo para agarrar uma entidade além quando o é esperado DataContext para ser usado ou válida você pode impor esse contrato por chamando Dispose. carregadores diferidos no essa entidade ainda vai ser referência o DataContext e vai tentar usá-lo Se todas as tentativas de código para navegar no Propriedades diferidos. estas tentativas vai falhar. Elimine também força o DataContext para despejar seu cache de materializou entidades para que um único entidade em cache não vai acidentalmente manter entidades todos vivos materializou através dessa DataContext, que seria caso contrário, causar o que parece ser um vazamento de memória.
  • A lógica que fecha automaticamente a conexão DataContext pode ser enganado e deixando a conexão abrir. O DataContext depende da código do aplicativo enumerar todos resultados de uma consulta desde a obtenção de a extremidade de um conjunto de resultados desencadeia o conexão com perto. Se o aplicativo usa de IEnumerable método moveNext em vez de um foreach declaração em C # ou VB, você pode sair a enumeração prematuramente. Se seu aplicativo apresenta problemas com conexões não fechando e você suspeitar que o comportamento de fechamento automático não está funcionando, você pode usar o Descarte padrão como um trabalho em torno.

href="http://csharpindepth.com/ViewNote.aspx?NoteID=89"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top