0

我有一个已经在内部使用了两年的备份程序,我正在寻求提高性能。

让我们以我的电脑为例:

在我的机器上,生成它需要评估的 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

再次感谢您提供的任何帮助。

约书亚

4

1 回答 1

1

Dictionary seems appropriate to me, as it uses hashing to store the data which allow for quick get of objects.does it reduce your processing time? if it does, what is your concern?

于 2013-03-22T18:51:22.737 回答