2

我有一个程序将文件的位加载到十六进制数组中,数组的结果长度为 16,777,216。我对数组进行了一些快速编辑,将其转换为一个巨大的字符串(长度为 33,554,432),以便可以将其转换回字节数组并写入新文件。好吧,我尝试这样做。

问题是字符串需要永远创建,即使在等待几分钟(这是我所期望的)之后也是如此。我认为没有更好的方法来设置这个字符串,就像我目前拥有的那样,但是有没有办法通过保持十六进制数组原样来实现这一点?或者是否有一种简单的方法让我只修改我需要的偏移量而不重写整个文件?

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

感谢你的协助。

4

1 回答 1

5

如果要对字符串进行大量操作,则应使用 aStringBuilder而不是直接附加到String.

由于System.String它是不可变的,因此每次执行时tHex &= gloBytes(i),您都在创建一个全新的字符串。这会导致大量的内存流失,并对 GC 施加很大的压力,进而导致整个事情变得非常缓慢。

StringBuilder另一方面,它旨在允许您多次附加到“字符串”而不是搅动内存,因为它是一个可变类,专门设计用于允许执行多个操作,然后ToString()一次转换为字符串(通过)在最后。

使用的等效代码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 回答