我有一个备份程序,已在内部使用了两年,我正在寻求提高性能。
让我用我的电脑作为例子:
在我的机器上生成需要评估的19,000个文件的初始列表大约需要7-10秒。
然后,将该文件列表与先前在备份位置备份的文件列表进行比较需要大约25-30秒。比较严格按照从要备份的系统到先前备份的版本的上次修改时间。通过这种方式,它只执行增量备份。
我最初只存储完整的文件名,然后创建文件的fileinfo链接以获取我需要的数据。
我创建了一个结构,其中包含我需要的文件中的5个字段,并将列表更改为字典,其中完整的文件名为键,值为结构。
当我将数据存储在Arraylist,List或Dictionary中时所花费的时间大致相同,所以显然我的比较是密集型任务,而不是我存储数据的方式。
我们的问题是适合我正在存储的数据类型的字典。所有完整的文件名都是唯一的,我真的不关心排序或备份数据的顺序。
下面是列表和比较子的一些描述,似乎放慢了最多:
私人子对照列表()
For Each _file As KeyValuePair(Of String, fileInfoS) In _FileListSRC
Dim dest As String
Try
Dim fi As fileInfoS = _file.Value
If fi.FullName.Contains(p_UserProfile) Then
dest = fi.FullName.Replace(p_UserProfile & "\", p_BackupLocation)
Else
dest = fi.FullName.Replace(fi.FolderRootName, p_BackupLocation)
End If
If _FileListDES.ContainsKey(dest) Then
If fm.fileLastWriteCompare(fi.LastModified, dest) Then
_FileList.Add(fi.FullName, fi)
_totalSize = _totalSize + fi.Size
End If
Else
If Not fm.FileExists(fi.FullName) Then Continue For
_FileList.Add(fi.FullName, fi)
_totalSize = _totalSize + fi.Size
End If
Catch ex As Exception
End Try
Next
再次感谢您提供的任何帮助。
约书亚
答案 0 :(得分:1)
字典似乎适合我,因为它使用散列来存储允许快速获取对象的数据。它是否会减少处理时间?如果是的话,你关注的是什么?