Я сам борюсь с этой проблемой. И у меня пока нет ответа, но у меня есть некоторые мысли.
Изучив ответы, данные другими к этому моменту, есть еще третий вариант.
В моем заявлении на сервер поступает около десяти или двенадцати вызовов для получения нужных мне данных. Некоторые из полей данных - это поля varchar max и varbinary max (изображения, большие документы, видео и звуковые файлы). Все мои звонки являются синхронными - то есть, пока запрашиваются данные, у пользователя (и программы на стороне клиента) нет другого выбора, кроме как ждать. Он может захотеть только прочитать или просмотреть данные, которые имеют смысл только тогда, когда они ВСЕ есть, а не только частично. Я полагаю, что процесс медленнее, и я нахожусь в процессе разработки альтернативного подхода, основанного на асинхронных обращениях к серверу из библиотеки DLL, которая вызывает события для клиента, чтобы объявить о ходе работы клиенту. Клиент запрограммирован для обработки событий DLL и установки переменной на стороне клиента, указывающей, что вызовы chich были завершены. Затем клиентская программа может делать то, что должна, для подготовки данных, полученных при вызове # 1, в то время как DLL работает асинхронно, чтобы получить данные вызова # 2. Когда клиент готов обработать данные вызова № 2, он должен проверить состояние и дождаться продолжения, если это необходимо (я надеюсь, что это будет короткое ожидание или его вообще не будет). Таким образом, как серверное, так и клиентское программное обеспечение работают более эффективно.