Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Post your project for free and start receiving proposals from freelancers within minutes after publication!

In WinForm on C# (.NET 8.0) make a break less than 1 ms per cycle

Translated

Applications 2

Application viewing is only available registered users.
  1. 404    37  0   1
    2 days27 USD

    Ready to fulfill your order.

    There is necessary experience.

    I will be happy to cooperate.
    With respect,
    by Arthur

  2. 1 proposal concealed
  • Serhii Novitsky
    26 February 2024, 17:15 |

    Я конечно не эксперт. Но я бегло посмотрел ваш код.
    У вас очень много потоков, циклов и вложенных циклов.
    Плюс в каждом цикле вы создаете новые экземпляры объектов...
    Это все очень трудозатратно для процессора.  В 50 потоков у меня процессор еще держался, но чем больше потоков, тем больше нагрузка... И не сильно понятно... Как эту нагрузку распределять... У меня на пример 8 ядер... И потоки распределились как сами хотели... Некоторые ядра вообще простаивали в пустую...
    Не сильно понятно, какую задачу вы преследуете...
    Так можно дойти и до потокового голодания и до состояния, когда открытых потоков на столько много, что процессор тратит все свои ресурсы на то, что бы проверить статус каждого потока, не говоря уже о том, что бы выполнять полезную работу...
    Если вам нужно выполнять похожие задачи, в вашем случае одинаковые, во многих потоках одновременно... Можно использовать для этого ресурсы видеокарты...
    У неё есть CUDA ядра, которых куда больше чем 5 000... И вы можете с их помощью выполнять любую зацикленную работу, сколько угодно рас. Это куда производительнее центрального процессора... Определенно это более специфическая реализация... Но производительность такого подхода вырастает в сотри раз, бе шуток... Архитектура видеопроцессора такова, что он может за один такт опросить сотри ядер CUDA... В отличии от центрального процессора... Которые тратит очень много времени на создание одного потока, не говоря уже о тысячах...

  • Aleksandr P.
    26 February 2024, 18:19 |

    Добавлю:
    - Я тоже погонял проект.
    Именно, вот такое решение как у вас не подходит, чтобы держать паузу в 440 микросекунд.
    Можно оформить в виде события, которое запускается каждые 440 микросекунд, но надо понимать суть вашей задачи.
    По текущему коду не получится так сделать, как вы написали или предложили.image
    У меня вот так как-то получилось для 500-сот потоков.

  • Serhii Novitsky
    26 February 2024, 19:45 |

    Могу дополнить, что с вашим исходным кодом (без изменений) на своем 8-ми ядерном Rayzen 7 в 5 000 потоков вообще не было проблем с паузами... Они были менее 0.44... Смею предположить, что на флагманах типа I9 последнего поколения или Rayzen 9 результаты будут куда лучше... Но что-то мне подсказывает, что для Вас это не выход из ситуации...

    Потому нужно понимать... Что конкретно Вам нужно и делать индивидуальное решение проблемы, для конкретной реализации кода... Ведь на сколько я понимаю, это лишь пример...

  • Profile deleted
    27 February 2024, 18:58 |

    дуже весело звісно для таких затримок використовувати спінлок, процесор буде задоволений) Значно доцільніше звернутися до того ж мультимедіа таймеру (або що там у віндовсі дає high-resolution таймер), замість того аби грузити процесор непотребом.

  • Gennady P.
    1 March 2024, 11:39 |

    Сделал реализацию.
    Получается задержка на обработку одного цикла из 5000 Item в 750 микросекунд (release mode).
    То есть 440 микросекунд на 5000 Item никак не получится.
    Реализовано через 8 потоков (реальное число ядер процессора), где каждый поток по очереди берет очередную Item.
    Больше потоков делать бесполезно - будет только падение из-за накладных расходов на переключение контекстов.

  • Gennady P.
    1 March 2024, 12:41 |

    После оптимизации удалось снизить задержку до 40 микросекунд.

    Теперь можно реализовать.

    Загрузка ЦП сейчас 25% и это выводе статуса каждой Item в DataGrid каждую секунду.

    Реализовано на WPF.

Current freelance projects in the category C#

Comparative analysis of the effectiveness of custom software (v2.2-field) and reference software (Meshtastic v2.x)

22 USD

Comparative analysis of the effectiveness of custom software (v2.2-field) and reference software (Meshtastic v2.x) on the identical hardware platform (ESP32 + SX1268, 2W) based on the criteria of range, throughput, link stability, and power consumption. Conduct tests with…

C & C++C# ∙ 3 days 22 hours back ∙ 2 proposals

Creation of a plugin for integration with the POS system Syrve, C#

Develop a plugin for the Syrve POS system (on-premise), which is installed on the establishment's server. The plugin must: (1) transmit data to our server in real-time — orders, table statuses, payments, receipts; (2) receive commands from Reservble — booking confirmations,…

C#Web Programming ∙ 6 days 19 hours back ∙ 14 proposals

Client
Maksim Lykov
Ukraine Ukraine  33  0
Project published
2 years back
210 views