2
我以前从未在此论坛上发帖,但在研究中使用它很多,但是这一次我找不到答案......也许我只是没有正确表述它。在同一物体上多次拨打新电话
我在Compact Framework项目中使用SqlCeCommand相当多,我一直在研究一段时间,并且因为内存不足而出现了一些问题,所以我试图优化非托管代码部分。
看看这个:
Dim SQLCmd as SQLCeCommand
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd.Dispose()
这是正确的,还是我每次我所说的同一对象上新时间失去了记忆?我之所以这样做而不是保留对象的同一个实例,是因为我不必每次都明确设置SQLCmd属性。因为有些人可能会使用参数,有些人可能不会,所以我认为使用新参数会更容易确保一切都很清晰。
任何想法或更好的方法来解决这个问题?
感谢您的输入,这就是我想过参考迷路。 GC仍然可以使用非托管代码吗? – henda79
非托管代码不在垃圾收集器领域之外,基本上,你自己就像在C/C++中一样。如果您真的打算使用“非托管资源”,请记住垃圾收集器知道所有受管资源,并且在某个时间点GC将释放所有关联的内存和资源。 GC不知道非托管资源,例如文件,流和句柄,因此,如果您没有在代码中明确清除它们,那么最终会导致内存泄漏和资源锁定。 – Steve
好吧,我认为这清除了它。但是你不能在using块之外声明变量。它必须像'使用SQLCmd = New SqlCeCommand'一样完成,它必须使用SQLCmd作为New SqlCeCommand,因为它不支持后期绑定。感谢您的建议。 – henda79