Подтвердить что ты не робот

В MATLAB существуют (x, 'file'), навсегда

Я использую exist(x, 'file'), чтобы проверить наличие файла на моей машине. Выполнение этой команды занимает FOREVER (более 10 секунд на звонок!).

Мой matlabpath не слишком длинный (около 200 записей), и все папки на пути находятся на моем локальном диске (без сети).

  • Почему exist берет навсегда?
  • Есть ли способ запустить FASTER?

PS,
Этот вызов exist является частью выполнения Matlab loadlibrary. Итак, если вы вызываете loadlibrary, и вы не знаете, почему требуется навсегда - этот вопрос также для вас.

4b9b3361

Ответ 1

Ничего себе! Это было тяжело. Итог: Удалить% TEMP% файлов!

У меня было несколько тысяч файлов, лежащих в % TEMP%. Кажется, MATLAB действительно нравится переходить через каталог TEMP.

После очистки папки TEMP exist выполняется в кратчайшие сроки!

(Спасибо Andrew за Process Monitor совет!)

Ответ 2

Вот одна идея. Вы можете поместить каталог, содержащий эти файлы заголовков, в начало пути MATLAB, поэтому, когда exist() просматривает путь, он быстро находит их и не должен искать остальные записи. Если он проводит свое время, проходя через ваш путь, это может помочь.

Ответ 3

  • exist - встроенная функция Matlab. Он предназначен для проверки существования других типов объектов (таких как переменные в Matlab), а также файлов. Будучи встроенной функцией, не просто понять, как она кодируется. По крайней мере, в Windows, когда вы вызываете exist('filename','file'), похоже, что только один вызов API в операционную систему проверяет существование файла. Таким образом, либо операционная система занимает много времени, либо есть некоторая навороченность в функции exist, заставляя ее работать медленно. См. Решения других плакатов за идеи о том, как операционная система быстрее возвращает свой результат.

  • Люди иногда жалуются, что запуск exist('filename','file') в цикле делает цикл очень медленным, это связано с тем, что вызов занимает, возможно, миллисекунды и цикл за несколько тысяч раз. Решением здесь является замена

    if exist('filename','file')   
      % your code

с линией

    if java.io.File('filename').exists
      % your code

Ответ 4

Для 372 файлов Matlab: Истекшее время составляет 40.207266 секунд. (получите чашку с тобой) Java: Истекшее время - 0.122165 секунд. (глаз мигает)