Как добиться максимальной пропускной способности обратного вызова с дуплексными каналами WCF - PullRequest
2 голосов
/ 03 апреля 2010

Я установил базовый клиент / сервер WCF, который обменивается данными по именованным каналам.

Это дуплексный контракт с обратным вызовом. После того, как клиент «подписался», поток на сервере просто вызывает ответный вызов как можно быстрее.

Проблема в том, что я получаю только пропускную способность 1000 обратных вызовов в секунду. И полезная нагрузка - только целое число!

Мне нужно приблизиться к 10000.

Все по существу работает с настройками по умолчанию.

Что я могу посмотреть, чтобы улучшить вещи, или я должен просто отказаться от WCF для какой-то другой технологии?

Спасибо

1 Ответ

1 голос
/ 30 сентября 2010

Хотя WCF рассчитан на высокую пропускную способность и низкую задержку, описанный вами сценарий раздвигает предел. Я вижу несколько способов решить:

Одним из возможных решений является объединение нескольких пакетов в один (например, 1 List<int> с 10 элементами вместо 10 отдельных int). Это резко сократит потери производительности за счет дополнительных элементов (заголовок и т. Д.) Для небольших пакетов.

Другая идея заключается в использовании асинхронных вызовов, поэтому задержка не ограничивает пропускную способность. Вместо ожидания прибытия предыдущего пакета, вы просто отправляете следующие пакеты немедленно. Этого также можно добиться с помощью флага OneWayCommunication.

Очевидно, что основной формат потока данных (именованный канал, TCP и т. Д.) Влияет на скорость, а также на физический канал (Ethernet и т. Д.). Насколько я знаю, tcp является одним из самых быстрых способов связи по сети и все еще чрезвычайно быстр на локальной машине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...