2

ファイルのバイトを 16 進配列にロードするプログラムがあります。結果の配列の長さは 16,777,216 です。配列に対していくつかの簡単な編集を行い、それを 1 つの巨大な文字列 (長さは 33,554,432) に変換して、これをバイト配列に変換し直して新しいファイルに書き込むことができるようにします。

問題は、文字列が作成されるのに何分もかかることです (私が期待するのはこれだけです)。現在持っているように、この文字列を設定するより良い方法はないと思いますが、16進配列をそのままにしておくことでこれを達成できる方法はありますか? または、ファイル全体を書き直すことなく、必要なオフセットのみを変更する簡単な方法はありますか?

 Dim tHex As String = ""
 For i = 0 To gloBytes.Length - 1
     tHex &= gloBytes(i)
 Next

ご協力ありがとうございます。

4

1 に答える 1

5

文字列に対して多くの操作を行う場合は、StringBuilderに直接追加するのではなく、を使用する必要がありStringます。

は不変であるため、System.Stringを実行するたびにtHex &= gloBytes(i)、まったく新しい文字列が作成されます。これにより、大量のメモリ チャーンが発生し、GC に大きな負荷がかかり、全体が非常に遅くなります。

StringBuilder一方、は、複数の操作を実行できるように特別に設計された可変クラスであるため、「文字列」に何度も追加でき、メモリをチャーンしないように設計されており、( 経由でToString()) 1 回文字列に変換されます。最後に。

を使用した同等のコードは次のStringBuilderようになります。

Dim tmp as New StringBuilder(gloBytes.Length * 2)
For i = 0 To gloBytes.Length - 1
    tmp.Append(gloBytes(i))
Next
Dim tHex As String = tmp.ToString()
于 2013-07-17T15:48:34.813 に答える