Хотя можно утверждать, что, поскольку это не переполнение буфера или какая-либо другая ошибка, которая может быть использована, это вещь в стиле , а не ошибка, я уверен на 99%, что ответ автор вопроса ищет, чтобы value
оперировали до того, как ему присвоили. Значение будет произвольным мусором, и вряд ли это будет то, что имелось в виду, так что это «потенциально неправильно».
Это не ваша забота ... Задача операционной системы - распределять время процессора между запущенными процессами. Если вы хотите, чтобы другие процессы сначала взялись за выполнение своих задач, просто уменьшите приоритет своего процесса, изменив для него значение Process.PriorityClass
.
Если ваш код вообще запущен, то он на 100%
Я полагаю, что некоторые сны могут иметь эффект.
Я должен задаться вопросом об этих 2-3 минутах фигура. Я тоже это видел, и полагаю, он загружает и инициализирует множество вещей, которые мне, вероятно, действительно не нужны.
Я честно считаю, что вместо того, чтобы беспокоиться о попытках ограничить использование ЦП вашим приложением, вам следует сосредоточить больше усилий на профилировании приложения, чтобы выявить и исправить узкие места и недостатки, которые могут существовать.
Вы можете запустить свою программу в потоке с более низким приоритетом потока , остальное зависит от вашей операционной системы. Неплохо, что процесс съедает 100% вашего процессора. Мой SETI обычно занимает все мое оставшееся процессорное время, не беспокоя мои другие программы. Проблема возникает только тогда, когда ваш поток получает приоритет над более важными программами.
Я думаю, что вам нужно понять проблему производительности в вашем приложении, вместо того, чтобы пытаться ограничить использование ЦП. Вы можете использовать Visual Studio Profiler, чтобы понять, почему ваше приложение в первую очередь загружает процессор на 100% в течение 2-3 минут. Это должно выявить «горячую точку» в вашем приложении, и тогда вы сможете решить эту проблему.
Если вы спрашиваете в целом о том, как выполнять регулирование ресурсов в Windows, то вы можете посмотреть на объекты «Задача», Объекты задания позволяют вам устанавливать ограничения, такие как рабочий набор, приоритет процесса ... и т. Д.
Вы можете проверить документацию по объектам задания здесь http://msdn.microsoft.com/en-ca/library/ms684161 (VS.85) .aspx Надеюсь это поможет. Спасибо
Если нет других запущенных задач, неправильно ли для вашего приложения использовать всю доступную емкость процессора? Он доступен , как и в , и его можно использовать бесплатно . Так что используйте его!
Если вы каким-то образом ограничите использование процессора вашей задачей, это займет больше времени. Но это все равно займет такое же количество циклов процессора, поэтому вы ничего не получите. Вы просто замедляете работу своего приложения.
Не делайте этого. Даже не пытайся. Нет причин, по которым вам следует это делать.
Вы можете написать класс Governor
, который ограничивает использование ЦП. Этот класс будет содержать служебный метод, который должен вызываться на регулярной основе (например, вызов этой служебной функции в цикле while вашей функции) вашей функцией, связанной с процессором. Регулятор проверяет, не превышает ли прошедшее время определенный порог, а затем засыпает на какое-то время, чтобы не использовать весь ЦП.
Вот простая реализация Java, пришедшая мне в голову (просто чтобы вы поймите идею), который снизит использование ЦП до 50%, если у вас есть однопоточная функция, привязанная к ЦП.
public class Governor
{
long start_time;
public Governor()
{
this.start_time = System.currentTimeMillis();
}
public void throttle()
{
long time_elapsed = System.currentTimeMillis() - this.start_time;
if (time_elapsed > 100) //throttle whenever at least a 100 millis of work has been done
{
try { Thread.sleep(time_elapsed); } catch (InterruptedExceptione ie) {} //sleep the same amount of time
this.start_time = System.currentTimeMillis(); //reset after sleeping.
}
}
}
Ваша функция, привязанная к ЦП, создаст экземпляр Губернатор
, а затем просто вызовет throttle
на регулярной основе в рамках функции.