Утечка памяти OracleConnection с Oracle Data Access (ODP) в VB.Net, но не в C # - PullRequest
0 голосов
/ 10 ноября 2011

Почему приведенный ниже код вызывает утечку памяти при выполнении? Ошибка происходит только тогда, когда я использую Microsoft Visual Studio 2005 или 2008 на языке vb.net. Если я использую 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 голосов
/ 10 ноября 2011

Код, который вы разместили, выглядит хорошо. Хотя в VB.NET есть оператор Using, который может помочь (реклама, по крайней мере, облегчит чтение вашего кода!). Вам нужно будет опубликовать больше информации, прежде чем можно будет дать какие-либо дополнительные предложения.

Возможно, вы захотите проверить этот старый ответ: Существуют ли приличные профилировщики C #? Несмотря на то, что они специфичны для c #, все профилировщики памяти .NET должны работать и для VB.NET.

0 голосов
/ 10 ноября 2011

Откуда вы знаете, что есть утечка памяти? Как у вас может быть утечка памяти с языком, который собирает мусор? Если вы получаете сообщение об ошибке, в котором конкретно говорится о наличии утечки памяти, возможно, проблема в самом драйвере базы данных, который мог быть написан на любом языке. Написание любого вида кода .NET для этого драйвера не должно вызывать никаких проблем в силу того, какой язык .NET вы используете.

...