关于在Dictionary或List中存储文件数据以及比较性能的建议

时间:2013-03-22 18:44:14

标签: .net list file-io dictionary arraylist

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

让我用我的电脑作为例子:

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

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

约书亚

1 个答案:

答案 0 :(得分:1)

字典似乎适合我,因为它使用散列来存储允许快速获取对象的数据。它是否会减少处理时间?如果是的话,你关注的是什么?