为什么下面的代码在执行时会导致内存泄漏?只有当我在vb.net语言中使用Microsoft Visual Studio 2005或2008时才会出现此错误。如果我使用C#,则没有问题。
Dim strCon As String = "data source=SRV-10G;user id=Test;password=1234"
dim factory as DbProviderFactory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
Dim conexao As IDbConnection = factory.CreateConnection
conexao.ConnectionString = strCon
conexao.Open()
For cont As Integer = 1 To 100000
Dim comando As IDbCommand = conexao.CreateCommand()
comando.CommandText = "Select * from tabela where campo = " & cont
Dim leitor As IDataReader = comando.ExecuteReader
While leitor.Read
Dim v As String = leitor.GetValue(1).ToString
End While
leitor.Close()
leitor.Dispose()
comando.Dispose()
Next
conexao.Close()
conexao.Dispose()
答案 0 :(得分:0)
你怎么知道内存泄漏?如何使用垃圾收集的语言进行内存泄漏?如果您收到一条错误消息,明确告诉您存在内存泄漏,则数据库驱动程序本身可能存在问题,该问题可能是用任何语言编写的。编写针对该驱动程序的任何类型的.NET代码不应该因为您正在使用的.NET语言而导致任何问题。
答案 1 :(得分:0)
您发布的代码看起来不错。虽然VB.NET有一个Using
语句可能会有所帮助(广告至少会让你的代码更容易阅读!)。在提供更多建议之前,您需要发布更多信息。
您可能想要查看这个旧答案:Any decent C# profilers out there?虽然特定于c#,但所有.NET内存分析器也应该适用于VB.NET。