【发布时间】:2017-09-12 13:43:46
【问题描述】:
我正在将旧的 VB6 应用程序转换为更新的 VB.NET 应用程序,升级后经常看到这 3 行:
rs.Close()
'UPGRADE_NOTE: Object rs may not be destroyed until it is garbage collected. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
rs = Nothing
其中 rs 是这样的 RecordSet 类型:
Dim rs As ADODB.Recordset
rs = New ADODB.Recordset
应该是最后一个
rs = Nothing
线还存在吗?或者
rs.Close()
够了吗?
【问题讨论】:
-
你应该升级的东西之一是 ADODB 到 ADONET
-
好消息。你在说这个:github.com/AlexGascon/ADODBNET/blob/master/ADODBNET/ADODBNET.vb 吗? @Plutonix
-
@Vlad: 不,这个:docs.microsoft.com/en-us/dotnet/framework/data/adonet/index 并且你应该使用
Using-语句来实现IDisposable的对象,比如DbDataReader -
ADONET 是 NET 框架的一部分。 Access 和 SQL Server DBProvider 是内置的(
System.Data命名空间)。如果您使用其他东西(MySQL,SQLite)他们有自己的提供者,但仍然使用来自System.Data的一些与数据库无关的工具(Datatable 等) -
RecordSet 是一个 COM 对象,它的 RCW 的终结器需要运行才能真正销毁它。将其设置为 null 实际上会延迟,因为对象被引用的时间比必要的长一点。您不会注意到,抖动本身已经删除了发布版本中的代码。但是,如果 rs 是类对象中的一个字段,可以存在一段时间,那么将其设置为 Nothing 可以加快速度。警告真正试图告诉您的是底层 COM 对象的寿命将比以前更长。在 GC 运行不够频繁的应用中不好。
标签: vb.net vb6 visual-studio-2005 vb6-migration