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

18

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

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

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

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

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

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

    
задан NKN 15.12.2014 в 14:45
источник
  • При использовании одного сценария один раз? Наверное, ничего. Но очистить все - это не только очистить переменные, но и загруженные функции и mex-функции (и, если я правильно напомню, также точки останова, которые установлены в этом скрипте). Эти функции должны быть загружены снова (что просто стоит немного времени), точки останова просто исчезнут и затруднят отладку скрипта, который начинается с четкости всех. Чтобы убедиться, что вы начинаете с чистого рабочего пространства, достаточно очистить переменные. –  Nras 15.12.2014 в 15:00
  • Готов поспорить, вы не получите это предупреждение, если используете ясное. Причина в том, что ясно, что все очищает функции, как объясняет Нрас. clear очищает только переменные. Поэтому скомпилированные функции хранятся в памяти. Посмотрите здесь немного больше информации. Ответ Амро особенно интересен. знак равно –  Stewie Griffin 15.12.2014 в 15:06

1 ответ

16

В R2015b была изменена семантика clear . Возможно, в ответ на проблемы, поднятые в этом вопросе, изменения, указанные в примечаниях к выпуску :

  

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

     

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

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

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

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

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

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

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

    
ответ дан chappjc 15.12.2014 в 22:01