Ленивая оценка / инициализация в приложениях с графическим интерфейсом - неразрушающие способы сделать это? - PullRequest
0 голосов
/ 25 марта 2011

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

Существуют ли какие-либо стандартные практики для такого подхода?Возможно, способы обнаружить низкую нагрузку на процессор или пользователя, который бездействует, и выполнить код в те времена?Аргументы против такого подхода?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

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

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

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

Проблема с ожиданием простоя состоит в том, что на некоторых компьютерах установлены программы, такие как SETI @ Home , и в этом случае на их компьютере практически нетвремя простоя.Если полная загрузка убивает отзывчивость вашего приложения, вы можете попробовать ввести режим сна.Это то, что делают многие видеоигры, когда вы задаете целевую частоту кадров, чтобы избежать привязки к процессору.Это позволит быстрее загружать данные, а не ждать простоя.

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

1 голос
/ 25 марта 2011

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

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

...