Изменение приоритета потока сделать мою программу и компьютер более быстро реагирующими

Я записал приложение winforms.NET, которое использует вторичный поток, чтобы сделать некоторую тяжелую обработку, которая связывается, это - продвижение назад к потоку UI. Все работает правильно, форма показывает прогресс, и я также создал кнопку отмены для прерывания потока обработки. Однако, когда трудоемкий процесс идет, приложение и мой весь компьютер замедляют путь. Требуется много времени, перетаскивают окна вокруг, и существует даже значительная задержка при попытке ввести буквы в блокнот.

Я предполагаю, что должен уменьшить приоритет потока обработки и/или увеличить приоритет потока UI. Действительно ли это правильно? Прямо сейчас оба потока являются Нормальным приоритетом.

Действительно ли это столь же легко как follwing? Или есть ли что-то еще, что я должен сделать?

Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;

Как я должен изменить приоритеты? Я должен уменьшить приоритет обработки или увеличить приоритет UI или обоих? И к какой установка? AboveNormal, или самый высокий?

8
задан Mat 17 May 2012 в 20:55
поделиться

4 ответа

Я не думаю, что приоритет нити является вашей проблемой (хотя это может быть частью проблемы). Посмотрите на этот вопрос в SO: Приоритет потоков фонового рабочего.

Возможно, в вашем фоновом потоке слишком узкие циклы, которые задерживают время работы процессора в этом потоке. Есть несколько способов исправить это, от жестоких (спящие потоки) до более разумных (мьютексы и события).

Вы также можете попробовать профилировать фоновый поток (либо напрямую, либо в тестовом жгуте), чтобы увидеть, где он проводит большую часть своего времени, и попытаться изолировать его с помощью асинхронных событий или аналогичных методов разгрузки.

5
ответ дан 5 December 2019 в 21:19
поделиться

Обычно вы должны установить приоритет рабочего потока на хороший уровень (например, пользователь может захотеть сделать что-то в другом приложении, и даже для них рабочий поток должен играть хорошо), хотя Windows уже немного повышает приоритет "активного" потока процессов (приложения, окно которого находится в фокусе ввода), чтобы он чувствовал себя более отзывчивым. Более высокие приоритеты обычно нужны, когда вам нужно уложиться в определенные временные ограничения.

0
ответ дан 5 December 2019 в 21:19
поделиться

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

-121--2894338-

Вы обычно хотите оставить приоритет основного потока в покое и уменьшить приоритет потока обработки до «Неактивно».

-121--3702223-

Если требуется, чтобы фоновый поток не влиял на быстродействие системы в целом, необходимо понизить его приоритет, скорее всего, установив для него приоритет BelowNormal .

В противном случае это будет иметь тот же эффект, что и в настоящее время.

При этом я бы не решился сделать это в своем собственном коде. Если программа запущена в системе с большим количеством процессорных ядер, это, скорее всего, не будет проблемой, и снижение приоритета потока (потенциально) приведет к тому, что обработка алгоритма займет больше времени.

2
ответ дан 5 December 2019 в 21:19
поделиться

Я всегда ненавидел комментарии, которые заполняют половину экрана звездочками только для того, чтобы сказать вам, что функция возвращает строку, я никогда не читал эти комментарии.

Некоторые комментарии в этом ключе, обычно не с форматированием , которые крайние, на самом деле существуют, чтобы помочь инструментам, таким как JavaDoc и Doxygen, создать документацию для вашего кода. Это, я думаю, хорошая форма комментария, потому что она имеет и гуманистический, и машиночитаемый формат для документации (чтобы машина могла перевести его в другие, более полезные форматы, такие как HTML), помещает документацию близко к коду, который она документирует (чтобы в случае изменения кода документация с большей вероятностью обновлялась для отражения этих изменений)и, как правило, дает хорошее (и немедленное) объяснение кому-то новому для большой кодовой базы, почему существует конкретная функция.

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

-121--2894340-

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

-121--2894338-

Вы обычно хотите оставить приоритет основного потока в покое и уменьшить приоритет потока обработки до "Неактивно".

0
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: