Я записал приложение winforms.NET, которое использует вторичный поток, чтобы сделать некоторую тяжелую обработку, которая связывается, это - продвижение назад к потоку UI. Все работает правильно, форма показывает прогресс, и я также создал кнопку отмены для прерывания потока обработки. Однако, когда трудоемкий процесс идет, приложение и мой весь компьютер замедляют путь. Требуется много времени, перетаскивают окна вокруг, и существует даже значительная задержка при попытке ввести буквы в блокнот.
Я предполагаю, что должен уменьшить приоритет потока обработки и/или увеличить приоритет потока UI. Действительно ли это правильно? Прямо сейчас оба потока являются Нормальным приоритетом.
Действительно ли это столь же легко как follwing? Или есть ли что-то еще, что я должен сделать?
Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;
Как я должен изменить приоритеты? Я должен уменьшить приоритет обработки или увеличить приоритет UI или обоих? И к какой установка? AboveNormal, или самый высокий?
Я не думаю, что приоритет нити является вашей проблемой (хотя это может быть частью проблемы). Посмотрите на этот вопрос в SO: Приоритет потоков фонового рабочего.
Возможно, в вашем фоновом потоке слишком узкие циклы, которые задерживают время работы процессора в этом потоке. Есть несколько способов исправить это, от жестоких (спящие потоки) до более разумных (мьютексы и события).
Вы также можете попробовать профилировать фоновый поток (либо напрямую, либо в тестовом жгуте), чтобы увидеть, где он проводит большую часть своего времени, и попытаться изолировать его с помощью асинхронных событий или аналогичных методов разгрузки.
Обычно вы должны установить приоритет рабочего потока на хороший уровень (например, пользователь может захотеть сделать что-то в другом приложении, и даже для них рабочий поток должен играть хорошо), хотя Windows уже немного повышает приоритет "активного" потока процессов (приложения, окно которого находится в фокусе ввода), чтобы он чувствовал себя более отзывчивым. Более высокие приоритеты обычно нужны, когда вам нужно уложиться в определенные временные ограничения.
Прокомментируйте все, что вы думаете, не просто, и вы не сможете понять, когда в следующий раз вы увидите свой код.
-121--2894338-Вы обычно хотите оставить приоритет основного потока в покое и уменьшить приоритет потока обработки до «Неактивно».
-121--3702223-Если требуется, чтобы фоновый поток не влиял на быстродействие системы в целом, необходимо понизить его приоритет, скорее всего, установив для него приоритет BelowNormal .
В противном случае это будет иметь тот же эффект, что и в настоящее время.
При этом я бы не решился сделать это в своем собственном коде. Если программа запущена в системе с большим количеством процессорных ядер, это, скорее всего, не будет проблемой, и снижение приоритета потока (потенциально) приведет к тому, что обработка алгоритма займет больше времени.
Я всегда ненавидел комментарии, которые заполняют половину экрана звездочками только для того, чтобы сказать вам, что функция возвращает строку, я никогда не читал эти комментарии.
Некоторые комментарии в этом ключе, обычно не с форматированием , которые крайние, на самом деле существуют, чтобы помочь инструментам, таким как JavaDoc и Doxygen, создать документацию для вашего кода. Это, я думаю, хорошая форма комментария, потому что она имеет и гуманистический, и машиночитаемый формат для документации (чтобы машина могла перевести его в другие, более полезные форматы, такие как HTML), помещает документацию близко к коду, который она документирует (чтобы в случае изменения кода документация с большей вероятностью обновлялась для отражения этих изменений)и, как правило, дает хорошее (и немедленное) объяснение кому-то новому для большой кодовой базы, почему существует конкретная функция.
В противном случае я согласен со всем остальным, что было заявлено. Комментировать почему, и только когда это не очевидно. Кроме Doxygen комментариев, мой код, как правило, имеет очень мало комментариев.
-121--2894340-Прокомментируйте все, что вы считаете несложным, и вы не сможете понять, когда в следующий раз вы увидите свой код.
-121--2894338-Вы обычно хотите оставить приоритет основного потока в покое и уменьшить приоритет потока обработки до "Неактивно".