Jump to content

    

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

Всем привет

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Обращайтесь - antis00(собака)mail.ru

 

Share this post


Link to post
Share on other sites
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 быстрее.

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

Share this post


Link to post
Share on other sites
24 минуты назад, SonicTel сказал:

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

 

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

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

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

 

Share this post


Link to post
Share on other sites

Multi thread ?

Согласен с antis

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

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

Edited by x893

Share this post


Link to post
Share on other sites
1 hour ago, antis said:

 

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

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

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

 

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

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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this