有关无效或无响应 Windows 更改通知句柄的故障排除
MATLAB® 使用一项称为更改通知句柄的 Windows® 操作系统功能来检测关联文件夹中的文件何时被修改。在某些情况下,Windows 无法向 MATLAB 提供有效的或有响应的更改通知句柄。更改通知句柄无效或无响应的三个最常见的原因包括:
Windows 已用完提供的通知句柄。
指定的文件夹位于不支持更改通知的文件系统上。(已知语法 TAS 文件服务器、SAMBA 文件服务器和许多 NFS 文件服务器都存在此限制。)
由于网络或文件服务器延迟导致更改通知到达延迟,因此未及时检测到更改。
当 MATLAB 无法获取有效或有响应的更改通知句柄时,将不能自动检测对文件和文件夹所做的更改。例如,在受影响的文件夹中添加的新函数可能未显示,而内存中已更改的函数可能未重新加载。
控制 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');