Мое приложение написано на .net и работает через сервер Windows. Он подключается через TCP/IP с удаленным сервером и продолжает слушать. Он отправляет только одно сообщение в начале соединения, которое является регистрационным сообщением, и после этого оно никогда не отправляет какое-либо сообщение, а просто слушает с сервера. Его потоковый сокет и пакеты продолжают поступать довольно часто, наступает около 6000 пакетов размером от 60 до 200 байтов. До сих пор я использую класс socket и подключается к удаленному серверу. После отправки запроса на вход я начинаю получать поток на постоянной основе. Чтобы получить поток, я использую BeginReceive, socketflags none. И после каждого начинания он повторяет задачу. Есть ли другой способ получить поток быстрее. Мое приложение - в реальном времени и очень очень критично. Даже 1 микросекунда. Может кто-нибудь предложить.Является ли класс Tcpclient/Tcplistner более быстрым, чем класс сокетов
0
A
ответ
2
TcpClient
просто обертка на вершине в Socket
и NetworkStream
. Он не будет работать быстрее - это просто другой (более удобный) API. Кроме того, как отмечает Йоахим, это вряд ли станет настоящим узким местом.
Некоторые идеи, которые вы можете попробовать:
- при использовании
NetworkStream
API, проверьтеDataAvailable
, что указывает на наличие в буфер данных; если есть, то попробуйте не обрабатывать синхронизации (через несколькоRead
) доDataAvailable
ложно, в котором точке переключения на асинхронный * (BeginRead
) - отдельных этапы буферизации сообщений против обработки сообщений - ваш компьютер, скорее всего, имеет более одного ядра, а отдельная очередь чтения/процесса-очереди может увеличить пропускную способность; Вы могли бы также рассмотреть вопрос о параллельных потоков обработки, но это более сложный
При работе с удаленным сервером, «Даже 1 микросекунды вопросы» просто неосуществимым. На этом уровне вы также хотели бы работать сумасшедшим по сбору мусора, возможно, глядя на использование struct
(прохождение через ref
), что очень сильно отличается от использования class
и не может быть изменено путем замены. И пул объектов и т. Д. Очень сложно.
Смежные вопросы
- 1. Является ли web.config более безопасным, чем класс?
- 2. Может ли класс получить более чем один абстрактный класс?
- 3. Использование более чем один класс
- 4. Является ли MySQL более быстрым, чем обычный запрос?
- 5. Как сделать статический класс быстрым?
- 6. Является ли '===' более эффективным, чем '! =='?
- 7. Является ли один класс проще и лучше, чем 6?
- 8. Должен ли класс службы быть более чем оболочкой класса репозитория?
- 9. Может ли класс быть подклассом более чем одного класса?
- 10. Проверьте, является ли класс полиморфным
- 11. Является ли этот класс POJO
- 12. Является ли этот класс потокобезопасным?
- 13. Проверка, является ли класс итерабельным
- 14. Является ли этот класс потокобезопасным?
- 15. Является ли этот класс неизменным?
- 16. Является ли класс TimeUnit сломанным?
- 17. Является ли этот класс синглом?
- 18. Является ли этот класс неправильным?
- 19. Более читаемый способ проверить, не является ли класс НЕ типа?
- 20. Является ли midiOutPrepareHeader быстрым звонком?
- 21. Является ли класс унаследованным от другого класса более крупным в памяти, чем класс, который не использует наследование?
- 22. является более быстрым инвариантом вращения RCNN?
- 23. Как узнать, является ли класс неизменным
- 24. Является ли javascript-класс «chzn-select» более чем просто именем класса?
- 25. Является ли класс класса Socket Socket Java при отправке данных
- 26. Будет ли сбор мусора C более быстрым, чем C++?
- 27. Более общий класс Functor
- 28. UITableview с более чем одной пользовательской ячейкой с быстрым
- 29. Располагая базовый класс, прежде чем унаследовал класс
- 30. Является ли этот класс нарушением SRP?
Это поможет показать больше кода; как выглядит ваш приемный цикл? – bobbymcr
Если серверная программа не находится на том же компьютере или в локальной высокоскоростной сети, сетевые задержки делают разрешение микросекунды бесполезным. –