大字符串永远“创造”

时间:2013-07-17 15:47:15

标签: vb.net binary hex

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

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

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

感谢您的协助。

1 个答案:

答案 0 :(得分:5)

如果您要对字符串进行大量操作,则应使用StringBuilder而不是直接附加到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()