0

社内で2年間使用しているバックアッププログラムがあり、パフォーマンスの向上を目指しています。

例として私のコンピューターを使用してみましょう:

私のマシンでは、評価する必要のある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

辞書は、オブジェクトの迅速な取得を可能にするデータを格納するためにハッシュを使用するため、私には適切なようです。それはあなたの処理時間を短縮しますか?もしそうなら、あなたの懸念は何ですか?

于 2013-03-22T18:51:22.737 に答える