运行存储过程时的高内存使用率(ASP.NET)

时间:2016-09-01 18:48:03

标签: asp.net memory memory-management informix

我正在研究的ASP.NET 3.5网站上似乎存在某种内存/ RAM问题。目前,我们在虚拟服务器上运行带有Windows 2012的2服务器Web场。当更多用户登录并开始使用该应用程序时,尤其是运行密集型数据库工作时,该w3wp.exe进程的内存使用量将会非常高(最高2.5-3 GB)。

我已经尝试了很多方法来帮助解决这个问题:

  • 请求增加虚拟服务器上的RAM
  • 确保所有数据库连接和读者都在"使用"语句
  • 调整代码中保存到Session变量的数据集中的任何部分,各种其他Session变量清理
  • 尝试使用WinDbg等分析内存转储,没有在日志上跳出来的真正重大问题

然而,我注意到,在进行密集数据库工作时,内存似乎非常高。我在网站上有一个按钮,当点击它时,它只是调用一个存储过程(仅供参考 - 这是一个Informix,而不是SQL数据库)。

从ASP.NET页面 -

Dim SWS As New PurchaseOrders

Protected Sub btnFunction_Click (ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFunction.Click

        SWS.MyFunctionCall()

End Sub

在App_Code文件的方法调用中 -

Using Conn As New IfxConnection(ConnectToInformix())
            Conn.Open()

            Dim cmd As New IBM.Data.Informix.IfxCommand()
            cmd.Connection = Conn
            cmd.CommandTimeout = 0
            cmd.CommandText = "auto_order"
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Parameters.Add("@storeID", IfxType.Integer)

            cmd.Parameters("@storeID").Value = store_id

            Dim value As String
            value = cmd.ExecuteScalar()

            If (value = "1") Then
                Return True
            Else
                Return False
            End If
    End Using

存储过程运行正常,但用户将连续运行此过程。同时,还有其他用户正在运行的其他数据库功能。所以当发生这种情况时,内存会高达2.5-3 GB。我已经在IIS中添加内存限制阈值,因为如果它超过大约3.5 GB内存使用量,网站上的所有内容都将返回对象引用错误。因此,一旦达到内存限制,它将回收,当然也会将用户注销。

有人有任何想法吗?非常感谢任何见解。感谢。

1 个答案:

答案 0 :(得分:0)

这听起来像是informix驱动程序中的内存泄漏问题。您可以尝试使用某些内存分析器进行分析吗?您可以在试用期间免费使用一些优秀的内存分析器。