Отслеживание прогресса рекурсивного метода

Я нахожу, что использование ключевого слова var на самом деле делает код более читаемым, потому что Вы просто привыкаете к пропуску ключевого слова 'var'. Вы не должны продолжать прокручивать право выяснить то, что делает код, когда Вы действительно не заботитесь о том, каков определенный тип. Если я действительно должен знать то, что тип 'объект' ниже, я просто толплюсь, моя мышь по нему и Visual Studio скажут мне. Другими словами, я очень читал бы

foreach( var item in list ) { DoWork( item ); }

много раз, чем

foreach( KeyValuePair<string, double> entry in list ) { DoWork( Item ); }

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

- Alan.

5
задан Eric Anastas 1 August 2009 в 22:15
поделиться

4 ответа

Общий подход к этой проблеме показывает, что индикатор выполнения меняется, но не обновляет фактический процент. Например, маленький значок загрузки в Firefox представляет собой кружок, который просто вращается - вы знаете, что он делает что-то , но вы не знаете, сколько времени это займет. Может быть, просто сделайте это и добавьте сообщение, что «это может занять некоторое время, в зависимости от объема данных ...»

3
ответ дан 14 December 2019 в 08:56
поделиться

Вы можете делать несколько вещей. Вы можете настроить структуру данных так, чтобы каждый узел хранил размер дерева с корнем в этом узле. Кроме этого:

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

  • Если деревья в целом достаточно сбалансированы, то после обработки k -го поддерева из общего количества n поддеревьев, вы прошли приблизительно k / n * 100. процентов узлов. Вы можете использовать эти знания как меру прогресса.

1
ответ дан 14 December 2019 в 08:56
поделиться

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

Например, если бы я просматривал организационную диаграмму, я бы знал, что мои конечные пользователи знакомы с большинством людей в организационной диаграмме, поэтому я бы использовал имена людей. В качестве примера, если я сообщу Бобу, который отчитывается перед Джо, который отчитывается перед Сью, когда моя запись обрабатывалась, метка сообщила бы что-то вроде ..

Currently processing Sue\Joe\Bob\David

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

Однако есть одно предостережение: обновление текста метки и вызов приложения.

1
ответ дан 14 December 2019 в 08:56
поделиться

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

Я полагаю, что подход Microsoft заключается в использовании цикла от начала до конца в цикле. индикатор.

0
ответ дан 14 December 2019 в 08:56
поделиться
Другие вопросы по тегам:

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