Реальный вопрос заключается в том, что происходит внутри системы для поддержки такой функции, как MARS.
На проводном уровне связь между Npgsql и PostgreSQL чрезвычайно проста: есть один сокет TCP, Npgsql отправляет запрос PGи PG отвечает всем набором результатов для этого запроса - одиночным циклом.
Различные модели для MARS заставляют Npgsql извлекать X строк каждый раз вместо получения полного результата;Npgsql будет буферизовать X строк в памяти и выполнять новую передачу туда и обратно, когда пользователь использует эти строки. Это позволило бы использовать MARS, но за счет введения большого количества новых сетевых циклов для каждого отдельного запроса: вместо одной циклической обработки теперь у вас есть N циклических циклов, где N - это число строк, разделенное на X. ,Кроме того, для буферизации строк используются дополнительные ресурсы памяти.
Другая возможность состоит в том, чтобы Npgsql считывал весь набор результатов и буферизовал его в памяти, поэтому каждый запрос немедленно используется, что позволяет выполнять другие запросы. Недостаток здесь, очевидно, заключается в потенциально огромных накладных расходах памяти для буферизации всего набора результатов.
Таким образом, MARS определенно возможен, вопрос в том, как он реализован и какую цену вы за него платите. Время от времени я получаю этот запрос от разработчиков, портирующих код с SQL Server, но, если честно, люди просто не просили его много.
PS Обратите внимание, что этот последний вариант может стать более актуальным с некоторыми изменениями перфектов, которые мы изучаем для следующей основной версии. Но пока не уверен.