我正在从SQLite数据库/记录集中检索字节blob。我对垃圾收集没有经验。
当我说:
Dim bt() As Byte
bt = r.fields("mybyteblob").value
......是好还是不安全?
我想在记录集字段中复制字节数组,我不确定我是否只是在这里引用字节数组而不是复制它。
答案 0 :(得分:2)
在您的代码中,您只引用字节数组 如果你想复制它,你需要
Dim bt() As Byte
if r.fields("mybyteblob").Value Is not Nothing then
dim lenArray = r.fields("mybyteblob").Length
bt = new Byte(lenArray)
Array.Copy(r.fields("mybyteblob").value, bt, lenArray)
end if
还有另一种选择 Buffer类比Array更快,因为你使用的是字节数组
Dim bt() As Byte
if r.fields("mybyteblob").Value Is not Nothing then
dim lenArray = r.fields("mybyteblob").Length
bt = new Byte(lenArray)
Buffer.BlockCopy(r.fields("mybyteblob").value, 0, bt, 0, lenArray)
end if
关于两种方法的
答案 1 :(得分:0)
如果您只编写托管代码(即没有P / Invoke),则遇到垃圾收集问题非常异常。
许多聪明人已投入大量精力进行垃圾收集工作而无需担心,所以要做到这一点:不要担心。只需编写您的代码,如果您遇到一个您不理解的特定行为,那么询问该特定行为(我可以向您保证,在99.9967%[1]的案例中它不会是垃圾收集器)。
[1]这不是随机数。在编程的大约10年里,我遇到过垃圾收集问题。假设每天有10个错误,每年有300天的工作,这就产生了29999/30000个与垃圾收集无关的错误= 99.9967%。