Parece que você precisa investigar seu código para descobrir onde as conexões estão sendo abertas e não fechadas.
Eu tenho um aplicativo no C # Framework 4.0. Como muitos aplicativos, este se conecta a uma base de dados para obter informações. No meu caso, esse banco de dados é o SqlServer 2008 Express.
O banco de dados está na minha máquina
Na minha camada de dados, estou usando a Enterprise Library 5.0
Quando publico meu aplicativo na minha máquina local (App Pool Classic)
Windows Professional
IIS 7.5
O aplicativo funciona bem. Estou usando essa consulta para verificar o número de conexões que meu aplicativo está criando quando estou testando.
SELECT db_name(dbid) as DatabaseName, count(dbid) as NoOfConnections,
loginame as LoginName
FROM sys.sysprocesses
WHERE dbid > 0 AND db_name(dbid) = 'MyDataBase'
GROUP BY dbid, loginame
Quando começo a testar, o número de conexões começa a crescer, mas, em algum momento, o número máximo de conexões é 26. Acho que tudo bem, porque o aplicativo funciona
Quando publico o aplicativo em TestMachine1
• Máquina virtual no modo XP (Windows XP Professional)
• IIS 5.1
Funciona bem, o comportamento é o mesmo, o número de conexões com o incremento do banco de dados para 24 ou 26, depois disso elas permanecem naquele ponto, não importa o que eu faça no aplicativo.
O problema:
Quando publico no TestMachine2 (App Pool Classic)
• Windows Server 2008 R2
• IIS 7.5
Eu começo a testar o aplicativo para que o número de conexão com o banco de dados comece a crescer, mas desta vez eles crescem muito rapidamente e não param de crescer aos 24 ou 26, o número de conexões cresce até chegar a 100 e o aplicação parar de funcionar nesse ponto.
Verifiquei qualquer diferença nas publicações, especialmente no Windows Professional e no Windows Server, e elas parecem ter os mesmos parâmetros e configurações.
Alguma pista de por que isso poderia estar acontecendo? , alguma sugestão?
Parece que você precisa investigar seu código para descobrir onde as conexões estão sendo abertas e não fechadas.
Concordo com as outras respostas que parece que você não está descartando uma conexão (ou comando ou outro recurso descartável) em algum lugar.
Usar um criador de perfil é uma boa ideia.
Rever cuidadosamente o código, procurando apenas por possíveis recursos não dispostos, pode funcionar. (Funcionou para nós, após três revisões).
Enquanto você está testando, sugiro adicionar pooling = false à sua string de conexão. Dessa forma, quando seu aplicativo fecha a conexão, ele realmente fecha, em vez de ficar por aí a critério do algoritmo de pooling.
Use um gerenciador de perfil de memória em um repro do servidor para descobrir onde os objetos de conexão que não são descartados estão sendo gerados. Corrigir o código Point.Eu tenho o mesmo em um cenário um pouco maior (8000 + connnections em poucos minutos). Me ajudou.
Agora eu uso link extensivamente - provavelmente o bbild memroy profilder e o ÚNICO que eu conheço com uma API para testes unitários;)
Tags iis