2014-12-15 4 views
17

В 2014b, когда я использую CLEAR ALL в начале сценария я получаю следующее предупреждение,Увеличение производительности путем удаления СБРОС

For improved performance, consider not using CLEAR ALL within a script

, не дано в предыдущих версиях (As I отзыв).

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

Есть ли какая-либо другая причина, по которой мне не хватает?

Как удаление CLEAR ALL повышает производительность при использовании одного сценария?

+5

При использовании одного сценария один раз? Наверное, ничего. Но '' clear all'' не только очищает переменные, но также загружает функции и mex-функции (и, если я правильно помню, также точки останова, которые устанавливаются внутри этого скрипта). Эти функции должны быть загружены снова (что просто стоит немного времени), точки останова просто исчезнут и затруднит отладку скрипта, который начинается с '' clear all''. Чтобы убедиться, что вы начинаете с чистой рабочей области, '' clear variables'' должно быть достаточно. – Nras

+6

Бьюсь об заклад, вы не получите это предупреждение, если используете 'clear'. Причина в том, что функция 'clear all' также очищает, как объясняет Nras. 'clear' только очищает переменные. Поэтому скомпилированные функции хранятся в памяти. Имейте [смотрите здесь] (http://stackoverflow.com/questions/16873733/why-does-matlab-run-faster-after-a-script-is-warmed-up) для получения дополнительной информации. Ответ Амро особенно интересен. =) –

+0

Очки, упомянутые «Nras' и« Robert », действительно интересны и полезны. Спасибо, парни. – NKN

ответ

15

ОБНОВЛЕНИЕ: В R2015b была изменена семантика clear. Возможно, в ответ на вопросы, поднятые в этом вопросе, то changes stated in the release notes не являются:

clear функция больше не очищает отладки точки останова. Чтобы очистить точки останова, используйте dbclear all.

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


Эта часть относится к предварительно R2015b версии MATLAB.

Here's a table того, что очищается с каждым аргументом ввода.

enter image description here

Стол для R2015b идентична за исключением того, что нет больше не столбец «Отладочные точки останова», так как они больше не очищается с clear.

Сценарии и функции очищаются, когда вы можете, возможно, просто clear variables (красные ящики). Не имеет смысла очищать функцию из памяти, которая в настоящее время выполняется. (Согласно примечания к выпуску R2015b, этого не происходит.)

Кроме того, имея в виду, что скрипты выполняются в основном рабочем пространстве, вы очищаете все функции, которые могут быть использованы других сценариев. Попробуйте посмотреть результат inmem после расширенного сеанса мастеринга MATLAB. Вы заполняете всевозможные функции MATLAB, которые загружаются в память для быстрого доступа (включая 'matlabrc', 'pathdef' и другие основные сценарии, которые настраивают ваше рабочее пространство). Таким образом, , возможно, это не то, что он повреждает производительность только сценария, где вы вызываете clear all, но все остальные скрипты и интерактивную командную строку, находящуюся в базовом рабочем пространстве. Это было бы моим догадком.

Не применимо к производительности, но еще одна причина, по которой clear all в сценарии может быть плохой идеей, заключается в том, что он очистит точки останова (это может раздражать!) И глобальные + постоянные переменные. Однако, возможно, цель состоит в том, чтобы очистить глобальные и постоянные переменные. Для global есть clear global, но нет ничего похожего на постоянство, поскольку постоянные переменные привязаны к функциям, и для них вы должны использовать clear functions или clear whateverFunctionName.

Смежные вопросы