MATLAB ® использует функцию операционной системы Windows ®, называемую дескрипторами уведомлений об изменениях, для обнаружения изменений файлов в связанной папке. При определенных обстоятельствах Windows не может предоставить MATLAB действительный или соответствующий дескриптор уведомления об изменениях. Тремя наиболее распространенными причинами недопустимых или неподтвержденных дескрипторов уведомлений об изменениях являются:
Система Windows исчерпала свой запас дескрипторов уведомлений.
Указанная папка находится в файловой системе, которая не поддерживает уведомление об изменениях. (Известно, что синтаксис файлового сервера TAS, файлового сервера SAMBA и многих файловых серверов NFS имеет это ограничение.)
Задержка сетевого или файлового сервера задерживает получение уведомления об изменении, так что изменения не обнаруживаются своевременно.
Если MATLAB не может получить допустимый или соответствующий дескриптор уведомления об изменениях, он не может автоматически обнаруживать изменения в файлах и папках. Например, новые функции, добавленные в соответствующую папку, могут быть невидимыми, а измененные функции в памяти могут не быть перезагружены.
Если MATLAB не может обнаружить изменения в файлах и папках из-за недопустимых или неподтвержденных дескрипторов уведомлений об изменениях, можно управлять тем, как MATLAB обнаруживает изменения в папках.
Если файловая система обновляет метки времени папок при добавлении файлов в папки, можно настроить политику удаленного пути системы для обнаружения изменений путем тестирования меток времени папок. Для этого включите эти команды в startup.m файл. Дополнительные сведения о создании startup.m см. раздел Параметры запуска в файле запуска MATLAB.
system_dependent('RemotePathPolicy', 'TimecheckDir'); rehash path;
Если файловая система не обновляет временные метки папок (например, файловая система NT), можно настроить политику удаленного пути системы для обнаружения изменений, перечитывая соответствующие папки с частыми интервалами. Для этого включите эти команды в startup.m файл.
system_dependent('RemotePathPolicy', 'Reload'); rehash path;
Чтобы определить, как MATLAB обнаруживает изменения в папках, используйте следующую команду:
system_dependent('RemotePathPolicy', 'Status');
В некоторых случаях обнаружение новых или измененных файлов в папках, на которые влияют недопустимые или неподтвержденные дескрипторы уведомлений об изменениях, не требуется. Если обнаружение изменений не требуется, для обеспечения максимальной производительности можно отключить политику удаленного пути системы. Для этого включите эти команды в startup.m файл.
system_dependent('RemotePathPolicy', 'None'); rehash path;
Иногда изменение политики удаленного пути системы не позволяет предотвратить проблемы, связанные с удаленным кэшированием файловой системы или задержками в сети. Если MATLAB все еще не может обнаружить изменения, внесенные в функцию, можно очистить старую копию функции из памяти с помощью clear функция. MATLAB считывает обновленную функцию при следующем вызове.
Чтобы проанализировать, на какие папки влияют недопустимые или неподтвержденные дескрипторы уведомлений об изменениях Windows, можно настроить количество предупреждающих сообщений, выдаваемых Windows. Для этого включите одну из этих команд в startup.m файл. Дополнительные сведения о создании startup.m см. раздел Параметры запуска в файле запуска MATLAB.
Показывать предупреждающие сообщения для всех недопустимых или неподтвержденных дескрипторов уведомлений об изменениях.
system_dependent('DirChangeHandleWarn', 'Always');
Показывать только первое предупреждающее сообщение о недопустимых или неподтвержденных дескрипторах уведомлений об изменениях.
system_dependent('DirChangeHandleWarn', 'Once');
Никогда не показывать предупреждающие сообщения о недопустимых или неподтвержденных дескрипторах уведомлений об изменениях.
system_dependent('DirChangeHandleWarn', 'Never');
Чтобы определить, когда Windows предупреждает о недопустимых или неподтвержденных дескрипторах уведомлений об изменениях, используйте эту команду.
system_dependent('DirChangeHandleWarn', 'Status');