在VB.NET中复制字节数组

时间:2012-10-19 07:36:12

标签: vb.net sqlite garbage-collection

我正在从SQLite数据库/记录集中检索字节blob。我对垃圾收集没有经验。

当我说:

Dim bt() As Byte
bt = r.fields("mybyteblob").value

......是好还是不安全?

我想在记录集字段中复制字节数组,我不确定我是否只是在这里引用字节数组而不是复制它。

2 个答案:

答案 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
关于两种方法的

Here a good question

答案 1 :(得分:0)

如果您只编写托管代码(即没有P / Invoke),则遇到垃圾收集问题非常异常。

许多聪明人已投入大量精力进行垃圾收集工作而无需担心,所以要做到这一点:不要担心。只需编写您的代码,如果您遇到一个您不理解的特定行为,那么询问该特定行为(我可以向您保证,在99.9967%[1]的案例中它不会是垃圾收集器)。

[1]这不是随机数。在编程的大约10年里,我遇到过垃圾收集问题。假设每天有10个错误,每年有300天的工作,这就产生了29999/30000个与垃圾收集无关的错误= 99.9967%。