2010-04-19 1 views
1

저는 VB.NET의 세계에 처음으로 새 프로그램으로 약 2,000 개의 Excel 스프레드 시트 디렉토리를 검색하고 해당 스프레드 시트 파일 내의 사용자 정의 문서 속성 값에 따라 표시 할 목록. 교육이나 무역으로 컴퓨터 프로그래머와 거리가 멀다는 것을 감안할 때 이것은 모험이었습니다.Interop.DSOFile을 사용하여 사용자 정의 문서 속성으로 파일을 검색 할 때 성능이 느려짐

나는 그 결과를 얻었습니다. 문제는 1 분 이상 걸리는 것입니다. LAN 연결을 통해 실행 중입니다. 로컬로 실행할 때 (약 300 개의 파일에 대한 'test'디렉토리 사용) 약 4 초 후에 실행됩니다.

합리적인 실행 속도로 기대할 사항조차 확실하지 않으므로 여기에서 질문 할 것이라고 생각했습니다.

누군가가 변경 사항을 생각하면 코드 속도가 빨라지므로 코드 속도가 빨라집니다.

미리 감사드립니다.

Private Sub listByPt() 
    Dim di As New IO.DirectoryInfo(dir_loc) 
    Dim aryFiles As IO.FileInfo() = di.GetFiles("*" & ext_to_check) 
    Dim fi As IO.FileInfo 
    Dim dso As DSOFile.OleDocumentProperties 
    Dim sfilename As String 
    Dim sheetInfo As Object 
    Dim sfileCount As String 
    Dim ifilesDone As Integer 
    Dim errorList As New ArrayList() 
    Dim ErrorFile As Object 
    Dim ErrorMessage As String 

    'Initialize progress bar values 
    ifilesDone = 0 
    sfileCount = di.GetFiles("*" & ext_to_check).Length 
    Me.lblHighProgress.Text = sfileCount 
    Me.lblLowProgress.Text = 0 
    With Me.progressMain 
     .Maximum = di.GetFiles("*" & ext_to_check).Length 
     .Minimum = 0 
     .Value = 0 
    End With 


    'Loop through all files in the search directory 
    For Each fi In aryFiles 
     dso = New DSOFile.OleDocumentProperties 
     sfilename = fi.FullName 
     Try 
      dso.Open(sfilename, True) 
      'grab the PT Initials off of the logsheet 
     Catch excep As Runtime.InteropServices.COMException 
      errorList.Add(sfilename) 
     End Try 
     Try 
      sheetInfo = dso.CustomProperties("PTNameChecker").Value 
     Catch ex As Runtime.InteropServices.COMException 
      sheetInfo = "NONE" 
     End Try 
     'Check to see if the initials on the log sheet 
     'match those we are searching for 
     If sheetInfo = lstInitials.SelectedValue Then 
      Dim logsheet As New LogSheet 
      logsheet.PTInitials = sheetInfo 
      logsheet.FileName = sfilename 
      PTFiles.Add(logsheet) 
     End If 
     'update progress bar 
     Me.progressMain.Increment(1) 
     ifilesDone = ifilesDone + 1 
     lblLowProgress.Text = ifilesDone 
     dso.Close() 
    Next 
    lstResults.Items.Clear() 
    'loop through results in the PTFiles list 
    'add results to the listbox, removing the path info 
    For Each showsheet As LogSheet In PTFiles 
     lstResults.Items.Add(Path.GetFileNameWithoutExtension(showsheet.FileName)) 
    Next 
    'build error message to display to user 
    ErrorMessage = "" 
    For Each ErrorFile In errorList 
     ErrorMessage += ErrorFile & vbCrLf 
    Next 
    MsgBox("The following Log Sheets were unable to be checked" _ 
      & vbCrLf & ErrorMessage) 

    PTFiles.Clear() 'empty PTFiles for next use 
End Sub 

답변

0

네트워크를 통해 파일에 액세스하는 것은 로컬보다 훨씬 느립니다. 이것은 간단한 사실입니다.

코드가 정상적으로 표시되는 것처럼 보입니다. 네트워크 액세스의 영향 만 볼뿐입니다.

+0

답장을 보내 주셔서 감사합니다. 나는 속도를 향상시키는 어떤 방법을 찾기를 희망했지만 그것이 그것이 무엇인지 추측한다! – Gradatc