Обычно, когда вы получаете исключение, сообщающее, что вы достигли порога вашего пула соединений, ваш код не закрывает / удаляет соединение должным образом.
Моя теория заключается в том, что в производственной среде вы сталкиваетесь с исключением из базы данных, которого нет в dev, и из-за этого ваши соединения остаются открытыми.
Вы всегда должны выполнять свою работу с базой данных в режиме Try / Catch, объявляя соединение и команду снаружи и инициализируя внутри. Вы никогда не должны полагаться на закрытие соединения в try / catch, всегда закрывать / удалять в блоке finally:
try
{
m_Connection = this.getConnection();
m_Command = this.getCommand();
m_Command.CommandTimeout = m_ConnectionTimeout;
m_Command.CommandText = sql;
m_Command.Connection = m_Connection;
m_Command.CommandType = CommandType.Text;
m_Connection.Open();
return m_Command.ExecuteNonQuery();
}
finally
{
if (m_Connection != null && m_Connection.State != ConnectionState.Closed)
{
m_Connection.Close();
m_Connection.Dispose();
}
if (m_Command != null)
m_Command.Dispose();
}
Одно приложение не должно потреблять 100 соединений с базой данных. Я бы проверил, правильно ли вы закрываете свои соединения. По крайней мере, поместите в журнал, где вы общаетесь с БД, чтобы увидеть, есть ли там исключение.