Процессор составляет 99% при написании потокового приложения - PullRequest
0 голосов
/ 01 января 2011

я создаю приложение на Windows C #, как менеджер загрузок, когда запускаю это приложение, я обнаружил, что загрузка процессора составляет 99%, и я пишу потоковое приложение, как я могу начать решать эту проблему

Ответы [ 5 ]

3 голосов
/ 01 января 2011

Поищите в вашем коде какие-либо замкнутые циклы - это почти наверняка связано с одним из них. Примерно так:

while (!finished)
{
    progressBar.Value = DownloadProgress;
}

Хотя, не видя вашего кода, трудно угадать более точно, чем это.

2 голосов
/ 01 января 2011

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

0 голосов
/ 01 января 2011

Я бы попробовал с ответом Джонса, а затем реализовал ответ Муэка.

У вас в коде где-то замкнутые циклы.Несмотря на низкий приоритет (если вы его использовали) - если у вас есть цикл, который не возвращает элемент управления планировщику потоков ядра, он будет использовать весь ЦП, пока элемент управления не будет взят из него.Например, у вас может быть:

while (!_shouldStop)
{
    DoProcessing();
}

Это действительно IS плохо, потому что оно, безусловно, будет использовать весь ваш процессор.

Чтобы решить эту проблему, самый простой способ - этоиспользуйте либо Sleep (100), либо Sleep (0) внутри цикла, что-то вроде:

while (!_shouldStop)
{
    DoProcessing();
    Thread.Sleep(0);
}

Есть также более эффективные (и несколько более сложные способы) сделать это - например, события - но для начала,с этим ваше приложение будет работать намного лучше.

0 голосов
/ 01 января 2011

Это мое любимое место для потоков, я не думаю, что вы можете найти более простую статью о стратегиях потоков.

http://www.albahari.com/threading/

0 голосов
/ 01 января 2011

Да, профилирование - хорошая идея. Используйте, например, Red Gate ANTS Performance Profiler , который можно бесплатно тестировать в течение 14 дней.

...