1

Тема: AHK: A_LoopFileLongPath тормозит

Имеем 2 кода. Это баг или что?
Если заменить A_LoopFileLongPath на A_LoopFileFullPath, то результаты идентичны.

Start := A_TickCount
Loop, Files, I:\*.mts, R
{
   loop 1000
      a := A_LoopFileLongPath
   break
}
msgbox % A_TickCount - Start

Start := A_TickCount
Loop, Files, I:\*.mts, R
{
   b := A_LoopFileLongPath
   loop 1000   
      a := b
   break
}
msgbox % A_TickCount - Start

2 (изменено: Malcev, 2015-09-22 09:32:33)

Re: AHK: A_LoopFileLongPath тормозит

http://ahkscript.org/docs/commands/LoopFile.htm
"Loop, Files, I:\*.mts, R" = "Loop, I:\*.mts, ,1"
Что-то они напортачили с рекурсией.

3 (изменено: yalanne, 2015-09-22 10:16:33)

Re: AHK: A_LoopFileLongPath тормозит

Malcev, А зачем один и тот же результат присваивать 1000 раз в одну переменную?

Что-то они напортачили с рекурсией.

А что с ней не так? У меня если нет файлов в основной папке при опции R, ответ просто 0. А в этой папке еще папка с файлами, при R показывает их путь.
Да и лагов вроде как нет.
Если надо что бы просто первый результат брался и стоп цикл то вот компактный вариант:

Loop, Files, E:\*.mp3,R,
{}Until (A_Index=1) and (a:= A_LoopFileFullPath) true

msgbox % a 

4

Re: AHK: A_LoopFileLongPath тормозит

Malcev, А зачем один и тот же результат присваивать 1000 раз в одну переменную?

Для теста.

Если надо что бы просто первый результат брался и стоп цикл то вот компактный вариант:

Тормоза возникают только при использовании рекурсии и A_LoopFileLongPath.
A_LoopFileFullPath - работает в порядке.

5

Re: AHK: A_LoopFileLongPath тормозит

Если заменить A_LoopFileLongPath на A_LoopFileFullPath, то результаты идентичны.

Если указывать не точный адрес, то есть вот так:

Loop, Files, *.mp3,R,
{}Until (A_Index=1) and (a:= A_LoopFileLongPath) true and (b:=A_LoopFileFullPath) true

msgbox % a "`n" b

Различия есть, в одном полный путь, в другом относительный от места старта.

6

Re: AHK: A_LoopFileLongPath тормозит

У вас мой первый пример работает без тормозов?
Цель топика только одна - это баг или не баг.

7

Re: AHK: A_LoopFileLongPath тормозит

Чем больше древо папок тем дольше загрузка получается.
Но на второй раз проверки практически мгновенно выводит.

8

Re: AHK: A_LoopFileLongPath тормозит

Запустите следующий код.
У меня в первом случае выскакивает от 1000 до 2000, во втором стабильно 0.
Происходит непонятная утечка в A_LoopFileLongPath.

Start := A_TickCount
Loop, Files, C:\*.exe, R
{
   loop 10000
      a := A_LoopFileLongPath
   break
}
msgbox % A_TickCount - Start

Start := A_TickCount
Loop, Files, C:\*.exe, R
{
   loop 10000
      a := A_LoopFileFullPath
   break
}
msgbox % A_TickCount - Start

9

Re: AHK: A_LoopFileLongPath тормозит

Первый раз  4-5 сек.
Второй 0. Скорей всего просто в памяти сохраняется.

10

Re: AHK: A_LoopFileLongPath тормозит

Спросил на офф.форуме.
По-моему логично было бы сохранять A_LoopFileLongPath в память.

11 (изменено: Malcev, 2015-09-22 11:39:14)

Re: AHK: A_LoopFileLongPath тормозит

Lexikos ответил, что так и задумано не сохранять ее в память.
Что A_LoopFileLongPath  это GetFullPathName(A_LoopFileFullPath) и что при вызове ее каждый раз посылается запрос.
https://msdn.microsoft.com/en-us/library/aa364963