内存泄漏OracleConnection与VB.Net中的Oracle数据访问(ODP),但不是C#

时间:2011-11-09 21:19:59

标签: c# vb.net memory-leaks odp.net idatareader

为什么下面的代码在执行时会导致内存泄漏?只有当我在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()

2 个答案:

答案 0 :(得分:0)

你怎么知道内存泄漏?如何使用垃圾收集的语言进行内存泄漏?如果您收到一条错误消息,明确告诉您存在内存泄漏,则数据库驱动程序本身可能存在问题,该问题可能是用任何语言编写的。编写针对该驱动程序的任何类型的.NET代码不应该因为您正在使用的.NET语言而导致任何问题。

答案 1 :(得分:0)

您发布的代码看起来不错。虽然VB.NET有一个Using语句可能会有所帮助(广告至少会让你的代码更容易阅读!)。在提供更多建议之前,您需要发布更多信息。

您可能想要查看这个旧答案:Any decent C# profilers out there?虽然特定于c#,但所有.NET内存分析器也应该适用于VB.NET。