2008-09-26 2 views
1

Ниже приведена довольно простая функция, которая подсчитывает, сколько файлов находится на машине. Вызывается «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 

ответ

1

В самой операционной системе хранятся данные, считываемые с диска. Это полностью вне вашей программы, и вы на самом деле не контролируете ее. Таким образом, когда вы запускаете свою программу очистки плунжера, она очищает эти кеши. Вот почему эти программы очистки ярусов вообще бесполезны - как вы можете видеть, опуская кеш, он заставляет вашу программу работать медленнее.

+0

Программа «очистки ярусов» была тем, что я написал себе как быстрый и грязный тест, чтобы попытаться сузить скорость. Это было очень уродливо и, из-за того, как оно было написано, имело тенденцию гнев системы. – Brian 2008-09-26 19:46:01

 Смежные вопросы

  • Нет связанных вопросов^_^