我有一个已经在内部使用了两年的备份程序,我正在寻求提高性能。
让我们以我的电脑为例:
在我的机器上,生成它需要评估的 19,000 个文件的初始列表大约需要 7-10 秒。
然后,需要大约 25-30 秒的时间将该文件列表与之前在备份位置备份的文件列表进行比较。比较严格按照从要备份的系统到先前备份的版本的最后修改时间。这样,它只执行增量备份。
我最初只是存储完整的文件名,然后创建一个指向该文件的 fileinfo 链接以获取我需要的数据。
我已经创建了一个结构,其中包含我需要的文件中的 5 个字段,并将列表更改为字典,其中完整文件名作为键,值是结构。
当我将数据存储在 Arraylist、List 或 Dictionary 中时,所花费的时间大致相同,所以显然我的比较是一项密集的任务,而不是我存储数据的方式。
我的问题是适合我存储的数据类型的字典。所有完整的文件名都是唯一的,我真的不关心排序或备份数据的顺序。
以下是列表的一些描述以及似乎最慢的比较子:
- _filelistSRC 是在要备份的文件夹中找到的文件列表
- _fileListDES 是在备份文件夹中找到的文件列表
- _fileList 是包含自上次备份以来已更改的文件的列表,应该备份
- fileInfoS 是仅包含每个文件所需信息的结构
- fm 是一个具有我使用的常用文件管理方法的类
私有子比较列表()
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
再次感谢您提供的任何帮助。
约书亚