Ниже приведена довольно простая функция, которая подсчитывает, сколько файлов находится на машине. Вызывается «C: \», для запуска требуется около 5 секунд. Если я не запустил это через какое-то время или не запустил программу разгона, в этом случае она занимает 60 секунд или больше. Я бы не подумал, что это может быть кеширование, так как каждый раз я делаю новое сканирование (т. Е. Начинает новый запуск программы, поскольку все, что он делает, это это сканирование), но, возможно, это связано с распределением памяти? Любые идеи о том, как сделать этот быстрый запуск, происходят каждый раз, или о том, почему это невозможно сделать? В других программах (например, SpaceMonger) удается получить общее количество файлов за 10 секунд, даже когда я очищаю свой плунжер или жду долгое время между прогонами. Таким образом, определенно есть способ сделать это, хотя и не обязательно в VB.Ускоренный поиск каталогов с помощью VB6 Query: проблемы с кешем и выпуском?
Private Function countFiles(Name As String) As Long
On Error GoTo ErrorHandler
DoEvents
Const CurMthd = "countFiles"
Dim retval As Long
13 Dim FindData As win.WIN32_FIND_DATA
14 Dim SearchPath As String
15 Dim FileName As String
17 Dim SearchHandle As Long
If Right(Name, 1) <> "\" Then Name = Name & "\"
19 SearchPath = Name & "*.*"
20 SearchHandle = win.FindFirstFile(SearchPath, FindData)
Do
DoEvents
' g_Cancel = True
If g_Cancel Then
countFiles = retval
Exit Function
End If
22 If SearchHandle = win.INVALID_HANDLE_VALUE Or SearchHandle = ERROR_NO_MORE_FILES Then Exit Do
23 FileName = dsMain.RetainedStrFromPtrA(VarPtr(FindData.cFileName(0)))
24 If AscW(FileName) <> 46 Then
If (FindData.dwFileAttributes And win.FILE_ATTRIBUTE_DIRECTORY) Then
retval = retval + countFiles(Name & FileName)
Else
retval = retval + 1
End If
28 End If
29 Loop Until win.FindNextFile(SearchHandle, FindData) = 0
win.FindClose SearchHandle
countFiles = retval
Exit Function
ErrorHandler:
Debug.Print "Oops: " & Erl & ":" & Err.Description
Resume Next
End Function
Программа «очистки ярусов» была тем, что я написал себе как быстрый и грязный тест, чтобы попытаться сузить скорость. Это было очень уродливо и, из-за того, как оно было написано, имело тенденцию гнев системы. – Brian 2008-09-26 19:46:01