ОБНОВЛЕНИЕ: В R2015b была изменена семантика clear
. Возможно, в ответ на вопросы, поднятые в этом вопросе, то changes stated in the release notes не являются:
clear
функция больше не очищает отладки точки останова. Чтобы очистить точки останова, используйте dbclear all
.
Функция clear
только очищает функции, которые в данный момент не работают. Например, когда вы вызываете clear myFun
, а myFun
работает, myFun
не очищается.
Эта часть относится к предварительно R2015b версии MATLAB.
Here's a table того, что очищается с каждым аргументом ввода.
Стол для R2015b идентична за исключением того, что нет больше не столбец «Отладочные точки останова», так как они больше не очищается с clear
.
Сценарии и функции очищаются, когда вы можете, возможно, просто clear variables
(красные ящики). Не имеет смысла очищать функцию из памяти, которая в настоящее время выполняется. (Согласно примечания к выпуску R2015b, этого не происходит.)
Кроме того, имея в виду, что скрипты выполняются в основном рабочем пространстве, вы очищаете все функции, которые могут быть использованы других сценариев. Попробуйте посмотреть результат inmem
после расширенного сеанса мастеринга MATLAB. Вы заполняете всевозможные функции MATLAB, которые загружаются в память для быстрого доступа (включая 'matlabrc'
, 'pathdef'
и другие основные сценарии, которые настраивают ваше рабочее пространство). Таким образом, , возможно, это не то, что он повреждает производительность только сценария, где вы вызываете clear all
, но все остальные скрипты и интерактивную командную строку, находящуюся в базовом рабочем пространстве. Это было бы моим догадком.
Не применимо к производительности, но еще одна причина, по которой clear all
в сценарии может быть плохой идеей, заключается в том, что он очистит точки останова (это может раздражать!) И глобальные + постоянные переменные. Однако, возможно, цель состоит в том, чтобы очистить глобальные и постоянные переменные. Для global есть clear global
, но нет ничего похожего на постоянство, поскольку постоянные переменные привязаны к функциям, и для них вы должны использовать clear functions
или clear whateverFunctionName
.
При использовании одного сценария один раз? Наверное, ничего. Но '' clear all'' не только очищает переменные, но также загружает функции и mex-функции (и, если я правильно помню, также точки останова, которые устанавливаются внутри этого скрипта). Эти функции должны быть загружены снова (что просто стоит немного времени), точки останова просто исчезнут и затруднит отладку скрипта, который начинается с '' clear all''. Чтобы убедиться, что вы начинаете с чистой рабочей области, '' clear variables'' должно быть достаточно. – Nras
Бьюсь об заклад, вы не получите это предупреждение, если используете 'clear'. Причина в том, что функция 'clear all' также очищает, как объясняет Nras. 'clear' только очищает переменные. Поэтому скомпилированные функции хранятся в памяти. Имейте [смотрите здесь] (http://stackoverflow.com/questions/16873733/why-does-matlab-run-faster-after-a-script-is-warmed-up) для получения дополнительной информации. Ответ Амро особенно интересен. =) –
Очки, упомянутые «Nras' и« Robert », действительно интересны и полезны. Спасибо, парни. – NKN