Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中,exist(x,';文件';)需要永远的时间_Matlab_File Io_Path_File Exists - Fatal编程技术网

在MATLAB中,exist(x,';文件';)需要永远的时间

在MATLAB中,exist(x,';文件';)需要永远的时间,matlab,file-io,path,file-exists,Matlab,File Io,Path,File Exists,我正在使用检查我的计算机上是否存在文件。此命令的执行需要很长时间(每次调用超过10秒!) 我的matlabpath不太长(大约200个条目),路径上的所有文件夹都在我的本地驱动器上(没有网络) 为什么存在需要永远 有没有办法让它跑得更快 PS, 调用exist是Matlab执行loadlibrary的一部分。因此,如果您正在调用loadlibrary,而您不知道为什么要花费一辈子的时间,那么这个问题也适用于您。这里有一个想法。您可以将包含这些头文件的目录放在路径的前面,这样当exist()查看路

我正在使用检查我的计算机上是否存在文件。此命令的执行需要很长时间(每次调用超过10秒!)

我的
matlabpath
不太长(大约200个条目),路径上的所有文件夹都在我的本地驱动器上(没有网络)


  • 为什么
    存在
    需要永远
  • 有没有办法让它跑得更快
  • PS,

    调用
    exist
    是Matlab执行
    loadlibrary
    的一部分。因此,如果您正在调用
    loadlibrary
    ,而您不知道为什么要花费一辈子的时间,那么这个问题也适用于您。

    这里有一个想法。您可以将包含这些头文件的目录放在路径的前面,这样当
    exist()
    查看路径时,它可以快速找到它们,而不必搜索其余条目。如果它花时间在你的道路上,那可能会有所帮助。

    哇!那是一个艰难的时刻。底线:删除%TEMP%文件

    我有几千份文件在里面。它似乎真的喜欢一遍又一遍地浏览临时目录

    清除临时文件夹后,
    exist
    立即运行

    (谢谢安德鲁的建议!)

  • exist
    是一个内置的Matlab函数。它用于检查其他类型对象(如Matlab中的变量)以及文件的存在性。作为一个内置函数,它不是一个简单的代码。至少在Windows上,当您调用
    exist('filename','file')
    时,它似乎只对操作系统进行一次API调用以检查文件是否存在。因此,要么是操作系统花费了很长时间,要么是
    exist
    函数中出现了一些膨胀,使其运行缓慢。有关如何使操作系统更快地返回结果的想法,请参阅其他海报中的解决方案

  • 人们有时会抱怨,在循环中运行
    exist('filename','file')
    会使循环速度非常慢,这是因为调用可能需要几毫秒的时间,并且循环数千次。这里的解决办法是替换

  • 如果存在('filename','file') %你的代码 排队

    if java.io.File('filename').exists % your code 如果java.io.File('filename')存在 %你的代码 372个文件 Matlab:运行时间为40.207266秒。(喝一杯)
    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