Мы используем шаблон репозитория petapoco (похожий на этот сообщение в блоге). Когда страница загружается, мы открываем репозиторий, запускаем запрос, удаляем и затем продолжаем обработку. Это нормально на легких страницах, но когда это происходит несколько раз на странице, мы получаем довольно значительное снижение производительности.
Я, возможно, ошибочно предположил, что с этим справится пул соединений, который включен.
Я провел пару тестов.
Страница, на которой он находится (это страница aspx), загружается примерно за 1,2 секунды, как на данный момент. Страница выполняет около 30 запросов к базе данных... и, глядя на профилировщик, выполняет вход и выход из системы для каждого запроса (даже с пулом соединений).
Если я сохраняю соединение и не закрываюсь до тех пор, пока страница не закончится, это уменьшится примерно до 70 мс, что является довольно значительной экономией.
Возможно, нам нужно сохранить объект базы данных для запроса, но я не думаю, что у PetaPoco были такие большие накладные расходы... особенно с пулом соединений.
Я создал тестовое приложение, чтобы продемонстрировать это.
Это демонстрирует, что загрузка пользователя 1000 раз занимает 230 мс, если репозиторий используется повторно, и 3,5 секунды, если репозиторий создается заново каждый раз.