13

exist(x, 'file')用来检查我的机器上是否存在文件。此命令的执行需要 FOREVER(每次调用超过 10 秒!)。

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

  1. 为什么exist需要永远?
  2. 有没有办法让它运行得更快?

PS,
这个调用exist是 Matlab 执行的一部分loadlibrary。所以,如果你打电话给loadlibrary你,但你不知道为什么要花很长时间——这个问题也适合你。

4

4 回答 4

21

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

于 2013-04-07T03:30:35.197 回答
18

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

我在%TEMP%中有几千个文件。看来MATLAB真的很喜欢遍历 TEMP 目录。

清除 TEMP 文件夹后,立即exist运行!

(感谢 Andrew 的Process Monitor建议!)

于 2013-05-07T07:12:13.043 回答
1
  1. exist是一个内置的 Matlab 函数。它旨在检查是否存在其他类型的对象(例如 Matlab 中的变量)以及文件。作为一个内置函数,要查看它是如何编码的并不容易。至少在 Windows 上,当您调用exist('filename','file')它时,它似乎只对操作系统进行一次 API 调用以检查文件是否存在。因此,要么操作系统需要很长时间,要么exist函数中存在一些膨胀使其运行缓慢。有关如何使操作系统更快返回结果的想法,请参阅其他海报中的解决方案

  2. 人们有时会抱怨exist('filename','file')在循环中运行会使循环非常慢,这是因为调用可能需要几毫秒并且循环了几千次。这里的解决方案是更换

    如果存在('文件名','文件')   
      % 你的代码

用线

    如果 java.io.File('filename').exists
      % 你的代码
于 2016-01-05T14:53:38.250 回答
0

对于 372 个文件 Matlab:经过的时间是 40.207266 秒。(喝一杯) Java:经过的时间是 0.122165 秒。(眨眼)

于 2017-07-15T15:34:18.107 回答