Pergunta

Todo mundo sabe que você deve fechar a conexão imediatamente depois de terminar de usá-lo.

Devido a uma falha no meu domínio de projeto do modelo de objeto, eu tive que deixar o aberto conexão para o ciclo de vida de página inteira. Essencialmente, eu tenho uma propriedade Just In Time que abre uma conexão em primeira convocação, e depois em Page.Unload (..) que iria verificar se uma conexão db estava sempre aberto e feche-lo se ele era. Uma vez que só leva um segundo, eu tive a opinião não é muito diferente do que fechá-lo imediatamente.

É este o ok? Ou deve ainda ser fechado imediatamente após cada uso único?

Agradecemos antecipadamente.

Foi útil?

Solução

Não é o ideal, mas eu não re-escrever o meu pedido sobre ele. A menos que sua página está fazendo uma grande quantidade de trabalho demorado em vários métodos, o ciclo de vida página inteira deve ser executado rapidamente. Na prática, pode apenas significar que o seu objeto de conexão é aberto alguns milissegundos mais do que teria sido de outra forma. Isso pode ser significativa em alguns cenários, mas não soa como seria no seu caso.

Outras dicas

Não, não é OK.

Se o seu aplicativo vai precisar para crescer ou escala, você vai querer corrigir esse problema. Ao manter a conexão aberta você está reduzindo sua capacidade de escala. Tenha em mente que as conexões abertas ocupam memória no servidor, memória no cliente, manter bloqueios abertos, etc.

E se você página acidentes antes de chegar ao evento Page.Unload? Você vai ter uma conexão aberta. Para mim é melhor sempre perto a conexão mais rapidamente possível.

Sim, é ok.

Fechando a conexão assim que você pode é uma prática recomendada para prevenir órfão conexões abertas, mas se tiver certeza de que a conexão é estar perto, não há nada de errado com isso.

Cada ASP.NET conexão usa aplicativos decente reunindo hoje em dia, e uma piscina é basicamente um conjunto de conexões abertas. No seu caso, isso significaria que a conexão que você está segurando a é "ocupado" e não pode ser usado para servir outros pedidos.

Tanto quanto eu ver que seria um problema de escalabilidade, dependendo da quantidade de tempo que suas necessidades de página para fazer o trabalho / render. Se você espera apenas a 100 usuários, como você diz, então provavelmente não é um problema -. A menos que seja 100 req / seg é claro

Do ponto de vista tecnológico, é OK. Tanto quanto eu me lembro a maioria das aplicações cliente-servidor (na Web e não-Web), incluindo ASP código clássico usado para trabalho como esse, por exemplo você declarar uma conexão para toda a página e trabalhar com ele.

acidentes de página? isto é o que usar e, finalmente, são para

Dito isso, por causa do desempenho DB (ou seja, dimensionamento) * é melhor manter as conexões abrir um período tão curto quanto possível, permitindo apenas que você não quer abrir perto aberto close close aberta para o trabalho rapidamente sequencial e previsível

* I foi disse este por um mentor no início da minha carreira, eu devo dizer que eu não tenho realmente testado isso mesmo, mas soa bem teoricamente

Claro que você pode mantê-los abertos, mas não não. Fechá-lo após o uso em blocos finally. Um comércio justo fora da "depois de cada uso único" é para fechá-la após cada bloco de uso, se você está apto a executar um proc armazenado, atualizar uma coluna, em seguida, excluir alguma outra linha, você poderia abrir / fechar ao redor dos três operações, presumindo que está tudo embrulhado em um try / catch / finally.

Você certamente deve manter a abrir conexão em todo o tempo de vida da página, se você estiver fazendo várias consultas durante a mesma. Geralmente, um conexões reutiliza em várias páginas, na verdade.

Eu acho que a melhor pergunta com feedback muito mais informada e produtiva seria possivelmente fornecendo alguns trechos de que você está fazendo (código) e expandindo sobre as razões por que você fez essa escolha. Há provavelmente uma solução melhor que não requer manter a conexão aberta tanto tempo, mas, pelo menos, por razões pragmáticas, você poderia obter algum feedback sobre se vale a pena reformulação.

No futuro, você definitivamente quer se afastar de acesso a dados em seu código-behind.

Acho que é conveniente para manter a conexão aberta ao usar ORM ( sessão aberta na vista ), de modo que depois de uma primeira busca ansiosa, outros dados podem ser carregados preguiçosamente conforme necessário. Isso funciona bem quando os tempos de resposta de página são razoáveis ??para não amarrar conexões.

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