在MATLAB中,exist(x,';文件';)需要永远的时间
我正在使用检查我的计算机上是否存在文件。此命令的执行需要很长时间(每次调用超过10秒!) 我的在MATLAB中,exist(x,';文件';)需要永远的时间,matlab,file-io,path,file-exists,Matlab,File Io,Path,File Exists,我正在使用检查我的计算机上是否存在文件。此命令的执行需要很长时间(每次调用超过10秒!) 我的matlabpath不太长(大约200个条目),路径上的所有文件夹都在我的本地驱动器上(没有网络) 为什么存在需要永远 有没有办法让它跑得更快 PS, 调用exist是Matlab执行loadlibrary的一部分。因此,如果您正在调用loadlibrary,而您不知道为什么要花费一辈子的时间,那么这个问题也适用于您。这里有一个想法。您可以将包含这些头文件的目录放在路径的前面,这样当exist()查看路
matlabpath
不太长(大约200个条目),路径上的所有文件夹都在我的本地驱动器上(没有网络)
存在
需要永远调用
exist
是Matlab执行loadlibrary
的一部分。因此,如果您正在调用loadlibrary
,而您不知道为什么要花费一辈子的时间,那么这个问题也适用于您。这里有一个想法。您可以将包含这些头文件的目录放在路径的前面,这样当exist()
查看路径时,它可以快速找到它们,而不必搜索其余条目。如果它花时间在你的道路上,那可能会有所帮助。哇!那是一个艰难的时刻。底线:删除%TEMP%文件强>
我有几千份文件在里面。它似乎真的喜欢一遍又一遍地浏览临时目录
清除临时文件夹后,exist
立即运行
(谢谢安德鲁的建议!)
exist
是一个内置的Matlab函数。它用于检查其他类型对象(如Matlab中的变量)以及文件的存在性。作为一个内置函数,它不是一个简单的代码。至少在Windows上,当您调用exist('filename','file')
时,它似乎只对操作系统进行一次API调用以检查文件是否存在。因此,要么是操作系统花费了很长时间,要么是exist
函数中出现了一些膨胀,使其运行缓慢。有关如何使操作系统更快地返回结果的想法,请参阅其他海报中的解决方案exist('filename','file')
会使循环速度非常慢,这是因为调用可能需要几毫秒的时间,并且循环数千次。这里的解决办法是替换Java:运行时间为0.122165秒。(眨眼)出于好奇,
x的值是多少?
?以防万一,看看我刚才遇到的这个问题。如果在调用exist
之前写入matlab路径中的文件,这可能会导致问题:也;这不是一个确切的答案,但如果您可以下载existfile
,它可能会解决这个问题:exist
需要很长时间,因为Matlab中的文件访问速度很慢。我发现让它运行得更快的唯一方法是替换它(例如,为了检查目录,我有一个函数,它尝试cd
)。200个路径条目听起来好像很多。你在用什么操作系统?您可以跟踪程序的系统调用以查看它在做什么,例如,在Windows上使用Sysinternals的进程监视器。它将向您显示所有文件访问及其持续时间,这可能会给您一个线索。我一定会尝试一下!如果您使用的是Windows,也可以尝试使用procmon,我怀疑您实际上可能正在运行以更改通知句柄限制。尽管他们都是本地的DIR,但这可能仍然是一个问题,因为他们太多了。谢谢你的指导和提示。我终于解决了-文件夹%TEMP%中的文件太多。。。您的建议非常有用。来自的另一个+1。@AndrewJanke我希望说“谢谢”还不算太晚:)使用java
API完成此任务是一种有趣的方法。您能否确认(例如,使用profiler)java方法确实更快?
if java.io.File('filename').exists
% your code