Перейти к содержанию
    

Нужны регулярные консультации программиста С#

Всем привет

Требуется программист С# с отличным знанием сетевых протоколов, умением работать с ними, с сетевыми устройствами и т.п. Особенно протокол UDP. Нужны консультации на регулярной основе. За $$ конечно же.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, x893 said:

Огласите первый вопрос пожалуйста.

Без проблем - 

Есть конкурентная очередь - 

private readonly ConcurrentQueue<DataReceivedFromDeviceEventArgs> _receivedPackets =
            new ConcurrentQueue<DataReceivedFromDeviceEventArgs>();

туда добавляются пакеты UDP (пейлоад) оч быстро. Очередь растет.

 

И есть метод доставания от туда пакетов - 

 while (true)
            {
                
                _queuePacketsNotifier.WaitOne();


                bool packetReceived = _receivedPackets.TryDequeue(out data);
                
                if (packetReceived)
                {
                    что-то делаем.
                }

          }

 

Размер пакета 7кб.

Вот процесс доставания пакета (_receivedPackets.TryDequeue(out data);) - счетчик времени пока не ставил, просто обычный счетчик. и так ясно что ОЧЕНЬ медленно - примерно 200 пакетов в секунду уходят далее на обработку. А надо ну раз в 40-50 быстрее.

Вопрос - что я делаю не так)) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 минуты назад, SonicTel сказал:

Вопрос - что я делаю не так)) 

 

Не показали весь код, что происходит в _queuePacketsNotifier.WaitOne(), знаете только вы.

Не понятно какая нагрузка на CPU.

Какую версию смотрите Debug или Release,

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Multi thread ?

Согласен с antis

что происходит в _queuePacketsNotifier.WaitOne()

Сделать свою ConcurrentQueue без сегментации по 32 элемента.

Изменено пользователем x893

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, antis said:

 

Не показали весь код, что происходит в _queuePacketsNotifier.WaitOne(), знаете только вы.

Не понятно какая нагрузка на CPU.

Какую версию смотрите Debug или Release,

 

м...вообще-то WaitOne() это метод private AutoResetEvent _queuePacketsNotifier = new AutoResetEvent(false);

нужен чтобы while loop не кушал бестолку ресурсы. Ставится нотификация при получении пакета в очередь и далее тут ожидалка, которая срабатывает...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

                while (_receivedPackets.TryDequeue(out data))
                {
                    что-то делаем.
                }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...