2008-09-26 2 views
1

다음은 컴퓨터에 얼마나 많은 파일이 있는지 계산하는 다소 단순한 함수입니다. "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 

답변

1

운영 체제 자체는 디스크에서 읽은 데이터를 캐시합니다. 이것은 완전히 당신의 프로그램 밖에 있고, 당신은 정말로 그것을 제어하지 않습니다. 따라서 "램 삭제"프로그램을 실행하면 이러한 캐시가 지워집니다. 이것이 바로 "RAM 삭제"프로그램이 일반적으로 완전히 쓸모없는 이유입니다. 알 수 있듯이 캐시를 비우면 프로그램이 느리게 실행됩니다.

+0

"RAM 삭제"프로그램은 속도 문제를 줄이기 위해 빠르고 간단하게 테스트 한 내용이었습니다. 그것은 매우 추한 것이었고, 기록 된 방식 때문에 시스템을 분노하는 경향이있었습니다. – Brian

+0

운영 체제 캐싱이 내 프로그램이 느린 이유 인 경우 시스템에 얼마나 많은 파일이 포함되어 있는지 계산하는 데 다른 메커니즘이 사용되는 이유는 무엇입니까? 이 문제에 대해 당신이 옳을 수도 있지만 다른 소프트웨어 (및 OS 자체)가이 문제를 해결했습니다. – Brian

관련 문제