gpt4 book ai didi

vb.net - 大字符串永远占用 'create'

转载 作者:行者123 更新时间:2023-12-02 04:57:36 26 4
gpt4 key购买 nike

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

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

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

感谢您的协助。

最佳答案

如果您要对字符串进行大量操作,您应该使用 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()

关于vb.net - 大字符串永远占用 'create',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17704419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com