Подтвердить что ты не робот

Увеличьте производительность, удалив CLEAR ALL

В 2014b, когда я использую CLEAR ALL в начале script, я получаю следующее предупреждение:

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

который не указан в предыдущих выпусках (как я помню).

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

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

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

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: В R2015b была изменена семантика clear. Возможно, в ответ на проблемы, поднятые в этом вопросе, изменения указанные в примечаниях к выпуску, следующие:

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

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


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

Здесь таблица того, что очищается с каждым входным аргументом.

enter image description here

Таблица для R2015b идентична, за исключением того, что столбцы "Отладка контрольных точек" больше не удаляются, так как они не очищаются с помощью clear.

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

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

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