首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET内存泄漏- OracleCommand

ASP.NET内存泄漏- OracleCommand
EN

Stack Overflow用户
提问于 2012-07-16 20:11:21
回答 2查看 180关注 0票数 0

我继承了一些这样的代码:

代码语言:javascript
复制
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Dim Test As Integer
                Dim strCon As String = "Data Source=TestDatabase;User Id=TestUser;Password=TestPassword;"
            For Test = 0 To 100000
            Dim objDBCon As New OracleConnection(strCon)
            Dim objDBCmd As New OracleCommand
            Dim objDR As OracleDataReader
            Using objDBCon
                'Using objDBCmd
                objDBCmd.Connection = objDBCon
                objDBCmd.CommandText = "SELECT * FROM nominal_incident where rownum = 1 "
                objDBCon.Open()
                objDR = objDBCmd.ExecuteReader
                'End Using

            End Using
        Next   
            Catch ex As Exception
              'Handle the exception.  It is not absorbed.
            End Try
        End Sub

这会导致内存泄漏吗?我希望看到使用如下语句:

代码语言:javascript
复制
Using objDBCmd

End Using

ASP.NET进程逐渐增长(超过1 GB),WinDBG显示堆上有OracleCommand对象(尽管没有我预期的那么多)。我认为OracleCommand可以保持对其他资源的控制,这会导致进程大小增加。

EN

回答 2

Stack Overflow用户

发布于 2012-07-16 21:29:23

Using用于在您使用对象后释放它,所以这不是问题所在。但是,using确实关闭了objDBCon连接。保持连接打开并在每次调用数据库时共享连接会更有效。因此,在这种情况下,我实际上会去掉使用for objDBCon,并将其拉出for循环,只需确保在所有db调用之后在循环外关闭它。

另外,我不确定这是不是直接从你的代码中复制过来的,我也不知道你的代码在做什么,但是100k对数据库的调用可能是它内存使用率如此之高的原因,并且会导致sql server上的高负载。

票数 0
EN

Stack Overflow用户

发布于 2012-07-16 21:29:52

我不认为这会导致内存泄漏,但事实上这会在一个循环中打开10万个连接(即使它们是池化的),我不认为看到如此大量的资源被消耗并不奇怪。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11504028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档