Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2016, 15:52   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию C# TCP - ищу алгоритмической подсказки

Хочу получить вполне словесный незамудренный ответ на словестное объяснение проблемы. Имеется 3 программы Windows Forms: Transmitter, Channel, Receiver.
Требуется запустить все 3, нажать на старт и наблюдать, как в первой генерируется некоторый массив double (довольно сложным методом, который занимает 0.1 секунду времени). Затем этот массив передается по TCP во второе приложение, но там просто копируется из потока в поток (согласитесь, операция недолгая). В итоге, со второй программы в третью передается массив данных, в третьей обрабатывается и выводится на экран.
Все происходит в реальном времени, то есть 31000 элементов double передается быстро из Transmitter через Channel в Receiver, а затем успевает отобразиться до того, как программой Receiver получены уже новая 31000 элементов. Это в идеале.
На практике же я сделал почти все, это два стандартных клиент-сервера, настроенных на разные порты, в Transmitter по таймеру раз в 3 секунды (для точности взял большой тайминг) генерируется 31000 элементов double, в канале просто происходит передача массива из потока в поток с помощью Invoke, и этот массив также отображается на графике. Как только Channel принял данные, он их сразу же передает, без тайминга. Я функцию сделал, которая выполняет действия только при поступлении данных.
Так вот, я даже передал данные в приемник. Но тут понял, что-то не то. У меня приемник даже при тайминге 3 с выдает правильный рез, правильный рез и вдруг... Косячит.
Я подумал, обработка на приемной части идет сравнительно долго, а у меня одновременно происходит прием TCP и обработка данных. Так вот, как лучше разделить процесс приема и обработку?

Или даже проще, как бы вы решали эту задачу? Не так важен код, как алгоритм, который не сложно написать на C#.
Krasi вне форума Ответить с цитированием
Старый 27.01.2016, 16:16   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

если вам важна быстрая прокачка, то почему тцп?

Цитата:
Затем этот массив передается по TCP во второе приложение, но там просто копируется из потока в поток (согласитесь, операция недолгая).
Ну как повезет и как написано, а то может менеджер памяти там гоняется.

Цитата:
Я подумал, обработка на приемной части идет сравнительно долго, а у меня одновременно происходит прием TCP и обработка данных. Так вот, как лучше разделить процесс приема и обработку?
Заведите второй буфер и чередуйте прием в них. Обработку в отдельный поток/нить/таск. А дальше надо код и алгоритм смотреть.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсказки alexey_kip Visual C++ 1 15.04.2012 13:25
составте програму для реализации на языке паскаль алгоритмической структуры множественого выбора Dina2360 Паскаль, Turbo Pascal, PascalABC.NET 0 18.12.2011 19:26
Пожалуста составте програму для реализации на языке паскаль алгоритмической структуры множественого выбора Dina2360 Паскаль, Turbo Pascal, PascalABC.NET 1 18.12.2011 15:00
как создать TCP клиент, TCP сервер ? DreamMaster911 C/C++ Сетевое программирование 1 26.10.2010 15:05