Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Розмістіть свій проєкт безплатно та почніть отримувати пропозиції від фрилансерів-виконавців уже через хвилини після публікації!

У WinForm на C# (.NET 8.0) зробити паузу менше 1 мс в циклі

Translated

Додатки 2

Перегляд додатків доступний тільки зареєстрованим користувачам.
  1. 404    37  0   1
    2 дні1200 UAH

    Готовий виконати Ваше замовлення.

    Необхідний досвід є.

    Буду радий співпрацювати.
    З повагою,
    Артур

  2. 1 ставку приховано
  • Сергій Новицький
    26 лютого 2024, 17:15 |

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

  • Александр П.
    26 лютого 2024, 18:19 |

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

  • Сергій Новицький
    26 лютого 2024, 19:45 |

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

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

  • Профіль видалено
    27 лютого 2024, 18:58 |

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

  • Геннадий П.
    1 березня 2024, 11:39 |

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

  • Геннадий П.
    1 березня 2024, 12:41 |

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

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

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

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

Актуальні фриланс-проєкти в категорії C#

Невелика гра для Unity 2d

Тз тут, сцена, UI, графіка вже є, потрібно тільки запрограмувати https://www.figma.com/design/btykPl7Odr8ggvwmTqO8pH/Robo-Loop?node-id=0-1&t=vlanszjRgKHH5U5m-1

C# ∙ 2 дні 1 година тому ∙ 15 ставок

Порівняльний аналіз ефективності кастомного ПЗ (v2.2-field) та еталонного ПЗ (Meshtastic v2.x)

1000 UAH

Порівняльний аналіз ефективності кастомного ПЗ (v2.2-field) та еталонного ПЗ (Meshtastic v2.x) на ідентичній апаратній платформі (ESP32 + SX1268, 2W) за критеріями дальності, пропускної спроможності, стабільності лінка та енергоспоживання. Провести тести з вимірюваннями з…

C та C++C# ∙ 6 днів 3 години тому ∙ 2 ставки

Створення плагіну для інтеграції з POS-системою Syrve, C#

Розробити плагін для POS-системи Syrve (on-premise), який встановлюється на сервер закладу. Плагін має: (1) передавати на наш сервер дані в режимі реального часу — замовлення, статуси столів, платежі, чеки; (2) приймати команди від Reservble — підтвердження бронювань, прив'язка…

C#Веб-програмування ∙ 9 днів тому ∙ 14 ставок

Замовник
Максим Лыков
Україна Україна  33  0
Проєкт опублікований
2 роки тому
210 переглядів