Я предполагаю, что вы сохраняете DataContexts и не вызываете Dispose для них, когда закончите (или оставляете их, по крайней мере).
Скорее, вы должны инициализировать ваш DataContext, выполнить вашу операцию, а затем утилизировать ее, когда закончите. Вы не должны хранить ссылку на него между операциями.
Желательно, чтобы вы использовали оператор using для обработки вызова IDisposable.
Что касается пула подключений, то SqlClient объединяет соединения по умолчанию, поэтому, если вы явно не отключите его, вы должны уже воспользоваться этим. Конечно, если вы не освобождаете соединения, которые используете, то пул займет у вас столько времени.