Я могу попросить вас подтвердить необходимость вашего (3) балла.Действительно ли логике приложения нужен весь этот большой объем данных на стороне клиента?Если вы можете уменьшить это до минимума и в DataGrid хранятся состояния положения прокрутки / фильтрации / поиска, то вы всегда можете довольно быстро получить следующий набор результатов с сервера на нумерацию страниц или триггер прокрутки.Конечно, это намного больше работы как на стороне клиента, так и на стороне сервера, чем выполнение Select * from Table в качестве результата WCF и привязка его к DataGrid :).Я хочу сказать, что вам может потребоваться подумать о виртуализации данных на стороне сервера, а не о клиенте, чтобы вы не доставляли нежелательные данные, на которые пользователь никогда не будет смотреть.
Подумайте о результатах поиска Google, браузер получаетлишь небольшая часть этих миллионов результатов, но сервер знает контекст.Поэтому я бы порекомендовал вам изучить эту идею и уменьшить сложности и работу на стороне клиента.Сделайте данные по сети как можно меньше и выполняйте вызовы к серверу как асинхронные фрагменты небольшого объема данных.Я уверен, что вы получите гораздо лучшие результаты.
(4) Вы можете использовать дуплексную привязку, или какой-либо механизм опроса ленивых нитей зависит от того, насколько быстро вам нужны обновления.опять же, сообщения об обновлении канала должны быть как можно меньше для повышения производительности.