首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Interop.DSOFile按自定义文档属性搜索文件时性能较低

使用Interop.DSOFile按自定义文档属性搜索文件时性能较低
EN

Stack Overflow用户
提问于 2010-04-20 01:51:19
回答 1查看 506关注 0票数 1

我是VB.NET世界的新手,我的任务是编写一个小程序来搜索包含大约2000个电子表格的目录,并根据该电子表格文件中的自定义文档属性的值来显示一个列表。鉴于我的教育或职业背景与计算机程序员相去甚远,这对我来说是一次冒险。

我已经让它工作了,结果很好。问题是,它的运行时间远远超过一分钟。它是通过LAN连接运行的。当我在本地运行它(使用一个包含大约300个文件的'test‘目录)时,它在大约4秒内执行。

我甚至不确定期望什么是合理的执行速度,所以我想我应该在这里问一下。

下面是代码,如果有人认为更改可能会对加快速度有所帮助。

提前谢谢你!

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-20 02:53:18

通过网络访问文件将比在本地访问慢得多。这是一个简单的事实。

据我所知,您的代码似乎没有问题--您只是看到了网络访问的效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2669639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档