다음은 컴퓨터에 얼마나 많은 파일이 있는지 계산하는 다소 단순한 함수입니다. "C : \"라고하는데 약 5 초가 걸립니다. 내가 잠시 동안 실행하지 않거나 RAM 제거 프로그램을 처음 실행하지 않는 한, 60 초 이상이 소요됩니다. 나는 새로운 스캔을 할 때마다 캐싱을 할 수 있다고 생각하지 못했을 것입니다. (즉, 프로그램의 새로운 intance를 시작합니다.이 스캔은 전부이기는하지만) 아마도 메모리 할당과 관련이 있을까요? 빠른 실행을 만드는 방법에 대한 아이디어는 매번 발생합니까? 아니면 수행 할 수없는 이유는 무엇입니까? 다른 프로그램 (예 : SpaceMonger)은 내 RAM을 정리하거나 실행 간격이 길어 지더라도 총 파일 수를 10 개로 늘릴 수 있습니다. 그래서 반드시 VB에서 할 필요는 없지만 확실히 이것을 할 수있는 방법이 있습니다.VB6 쿼리를 사용하여 더 빠른 디렉터리 워크 : 캐시 및 RAM 문제가 있습니까?
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
"RAM 삭제"프로그램은 속도 문제를 줄이기 위해 빠르고 간단하게 테스트 한 내용이었습니다. 그것은 매우 추한 것이었고, 기록 된 방식 때문에 시스템을 분노하는 경향이있었습니다. – Brian
운영 체제 캐싱이 내 프로그램이 느린 이유 인 경우 시스템에 얼마나 많은 파일이 포함되어 있는지 계산하는 데 다른 메커니즘이 사용되는 이유는 무엇입니까? 이 문제에 대해 당신이 옳을 수도 있지만 다른 소프트웨어 (및 OS 자체)가이 문제를 해결했습니다. – Brian