Создание экземпляра репозитория для каждого запроса само по себе не должно вызывать проблем с производительностью; репозиторий часто довольно неглубокий, и когда ему необходим доступ к данным, такие как пул соединений, минимизируют стоимость установления фактических соединений. Создание объекта удивительно дешево, особенно для таких недолговечных вещей, как веб-запросы, когда объект собирается, пока он находится в «нулевом поколении».
Относительно того, иметь ли один репозиторий или репозиторий на экземпляр - это зависит от репозитория; -p
Самый большой вопрос: безопасна ли ваша ветка хранилища? Если нет: по одному на запрос.
Даже если это так; если ваш репозиторий сам хранит что-то вроде LINQ-to-SQL DataContext
(который вы каким-либо образом синхронизируете), то у вас большие проблемы, если вы сохраняете это в долгосрочной перспективе, в частности, с менеджером идентификации. Вы быстро будете использовать много памяти и , чтобы получить устаревшие результаты. Далекая форма идеала.
С одним экземпляром репозитория вы, вероятно, также столкнетесь с большим количеством блокировок, пытаясь обеспечить безопасность потоков. Это может уменьшить пропускную способность. И наоборот, сама база данных имеет хорошие способы достижения гранулярных блокировок - что особенно полезно, если учесть, что часто параллельные запросы будут рассматриваться в отдельных таблицах и т. Д., Поэтому не нужно блокировать на уровне базы данных. Это было бы очень трудно сделать только на уровне хранилища - так что вам, вероятно, пришлось бы синхронизировать всю "выборку" - очень плохо.
IMO, в большинстве случаев по одному на запрос. Если вы хотите кэшировать данные, делайте это отдельно - т.е. не напрямую в экземпляре хранилища.