Нам нужно освободить место на одном из наших сетевых жестких дисков. В рассматриваемом каталоге содержится 526 ГБ данных, 180914 файлов в 13555 каталогах.Слишком длинный поиск файла
Итак, я написал код, чтобы найти копии файлов. Пользователь указывает файл для поиска, и приложение находит все экземпляры файла. Он отлично работает, за исключением нескольких минут. Я не удивлен этим, но тот же поиск в Windows Explorer быстрее.
Причина, по которой я думаю, это потому, что я запускаю свое приложение, а затем выполняю тот же поиск в проводнике Windows, который ищет ту же папку для того же файла.
Существует одна разница, и я просто не знаю, сколько это будет важно ...
Поскольку некоторые из искомых файлов имеют одинаковые имена (например ОПЕРАЦИИ Manual.pdf), но разные, я сравниваю размер, когда я получаю удар. Таким образом, поиск находит файл, и я проверяю размер файла, возвращая только те, у которых одинаковые имена и размеры файлов.
я получаю 5 в частности, поиск и исследователь возвращает 74.
Мое приложение занимает 2 минуты и исследователь занимает 1 минуту.
Есть ли что-нибудь, что я могу сделать, чтобы быть более эффективным? Я бы ожидал, что я смогу приблизиться к тому, что делает исследователь для производительности.
Вот код ...
'find all instances of the file
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
'first clear the listbox
LB_Files.Items.Clear()
'set the lbel text for the list box
Label1.Text = "Finding all instances of: " & TB_File.Text & " in directory: " & TB_Drive.Text & " and all sub-driectories... PLEASE STAND BY"
'make sure the label updates
Me.Refresh()
'run through and find each file and add it to the listbox
For Each foundFile As String In My.Computer.FileSystem.GetFiles(TB_Drive.Text, Microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubDirectories, TB_File.Text)
'check if the file is a shortcut and if it is do nothing
If foundFile.Contains(".lnk") Then
Else
Dim infoReader As System.IO.FileInfo
infoReader = My.Computer.FileSystem.GetFileInfo(foundFile)
newfilesize = infoReader.Length
'MsgBox("The old file size is: " & oldfilesize & ", and the new file size is: " & newfilesize)
'for each file that is not a shortcut, add it to the list box
'check if the file sizes match, don't want to add a file if it is not the same file
If newfilesize = oldfilesize Then
LB_Files.Items.Add(foundFile)
'update the file count
count = count + 1
newfilesize = 0
End If
'reset the newfilesize
newfilesize = 0
End If
Next
'once we find all the files, change the lable to say how many we have.
Label1.Text = "Found " & count.ToString & " instances of " & TB_File.Text & "."
End Sub