Я не думаю, что у вас будут различия в производительности, если вы используете одноэлементный режим или нет, потому что у вас все еще может быть несколько потоков, работающих на одном и том же методе одновременно. Если вы позаботитесь о том, чтобы не иметь внутренних полей, которые будут совместно использоваться всеми потоками, все будет работать хорошо.
В конце класс, который управляет пулом соединений, должен быть потокобезопасным, и в итоге вы сделаете несколько блокировок, которые могут повлиять на производительность, но все они необходимы. (это сделано внутри фреймворка, и вы не можете изменить его поведение в любом случае)
Если вы решили не использовать синглтон, убедитесь, что ваши экземпляры DAL имеют малый вес, потому что это может иметь значение, но обычно это не так.
Примечание. Говоря о пулах соединений, единственная важная вещь, о которой вы должны позаботиться, - это следовать схеме «открывать поздно, закрывать рано». Это означает, что следует как можно больше отложить открытие соединения и закрыть его как можно скорее после того, как вы сделали с ним все, что вам нужно.
После того, как вся система построена с использованием этого магического правила, вы можете поиграть с параметрами строки подключения, чтобы изменить некоторые параметры пула (начальный размер, максимальный размер, ...)