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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2017, 11:36   #1
k0shiki
 
Регистрация: 29.01.2016
Сообщений: 7
По умолчанию C# сетевое программирование

Доброго времени суток! требуется помощь. По постановке задачи мне необходимо организовать real-time обмен данными (около 25-30 строк с параметрами), с частотой в 20 мс или меньше. Код программы на C#. Имеется 2 компьютера, 1 с которого эти параметры циклически считываются (организованно посредством элемента timer) и записываются в .ini файл в расшаренной папке другого компьютера. Другая программа на "клиенте" считывает циклически эти параметры и применяет их. Столкнулся с проблемой, при задании интервала цикла таймера, например , в <100 мс, программа сильно начинает подтормаживать, и данные применяются не с той частотой. которую задаю в таймере. При интервале применения 100мс +, все работает хорошо, никаких ошибок не выявляется. Каким образом можно оптимизировать программу, и верен ли вообще такой подход?
k0shiki вне форума Ответить с цитированием
Старый 22.06.2017, 12:30   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Осознать и хорошо поразмыслить на тем, что винда не реалтайм система
2. Отказаться от сетевых папок и т.д. К ним доступ гарантировано может быть более 100 мс
3. Осознать, что есть минимальный квант для процесса/таймера и т.д. Он различается для серверных и десктопных версии винды.
4. Рассмотреть более точные таймеры, например, Waitable Timer
p51x вне форума Ответить с цитированием
Старый 22.06.2017, 12:58   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от k0shiki Посмотреть сообщение
Доброго времени суток! требуется помощь. По постановке задачи мне необходимо организовать real-time обмен данными (около 25-30 строк с параметрами), с частотой в 20 мс или меньше. Код программы на C#. Имеется 2 компьютера, 1 с которого эти параметры циклически считываются (организованно посредством элемента timer) и записываются в .ini файл в расшаренной папке другого компьютера. Другая программа на "клиенте" считывает циклически эти параметры и применяет их. Столкнулся с проблемой, при задании интервала цикла таймера, например , в <100 мс, программа сильно начинает подтормаживать, и данные применяются не с той частотой. которую задаю в таймере. При интервале применения 100мс +, все работает хорошо, никаких ошибок не выявляется. Каким образом можно оптимизировать программу, и верен ли вообще такой подход?
Технически не реализуется желаемое на выбранных инструментах.
Винда не даст никакой гарантии по задержкам. Файловая шара тоже ничего не гарантирует. Нужен рил-тайм - берите рил-тайм ОС и меняйте способ обмена информацией.
pu4koff вне форума Ответить с цитированием
Старый 22.06.2017, 13:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

категорически согласен с предыдущими замечаниями.
и ещё хотелось бы добавить, что сетевой обмен тоже не наносекунды занимает.
поэтому, либо, если такие высокие требования к быстродействию оправданы, задачу нужно уводить на принципиально иной технический уровень (грубо говоря - делать железку), либо снижать требования к быстродействию.

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Нужен рил-тайм - берите рил-тайм ОС и меняйте способ обмена информацией.
вот, это тоже решение.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2017, 13:34   #5
k0shiki
 
Регистрация: 29.01.2016
Сообщений: 7
По умолчанию

Спасибо всем за дельные советы. В таком случае, не подскажите куда копать? уточню: речь идет об уже готовой программе, а точнее симуляторе, есть SDK есть методы, которыми эти параметры применяются на клиентах, но встроенный многопользовательский режим (мультиплеер) сильно режет возможности программы, которые, однако, доступны в однопользовательском режиме. В итоге решили переписать мультиплеер, упоминаний каким образом точно организован обмен данными со стороны разработчиков,естественно,нет и не будет. Вот и встал вопрос, данные считывать на стороне "сервера" мы умеем, применять на клиентских PC тоже, сейчас уперлись в то, каким образом с минимальной задержкой передавать эти данные. Вся беда в том, что до сих пор сетевым программированием никто в команде не занимался, мне б узнать направление, куда копать, какие протоколы в таком случае и алгоритмы использовать... Всем заранее огромное спасибо!
k0shiki вне форума Ответить с цитированием
Старый 02.07.2017, 14:00   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Что-то вы темните... Вы хак или чит пишите чтоль? Если у вас есть готовый сетевой стек от разработчиков, то обычно пофиг какой режим - бери и шли, что надо по протоколу.
p51x вне форума Ответить с цитированием
Старый 03.07.2017, 17:19   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Я ничего не понял. И задержка зачем и ini-файл зачем.
Между первым компьютером и вторым откройте хоть TCP сокет и гоняйте данные. Один по мере получения данных отправляет их в сокет, второй постоянно читает то, что пришло, без всяких искусственных задержек.
pu4koff вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# сетевое программирование Effractor C# (си шарп) 10 26.08.2013 23:30
Сетевое программирование на Си kilgoreq Общие вопросы C/C++ 0 16.04.2011 00:07
Сетевое программирование Armatus Обсуждение статей 16 01.12.2010 09:57
Сетевое программирование Тунец Помощь студентам 4 09.07.2009 00:07
Сетевое программирование Winnows-32 Помощь студентам 1 01.12.2008 07:16