任何可能的内存泄漏机会?

时间:2012-09-29 07:53:51

标签: asp.net vb.net

我收到此错误 System.OutOfMemoryException:抛出类型'System.OutOfMemoryException 的异常。为什么?请帮助我。我收到此错误(仅当我在线托管网站时,而不是在本地机器上)。

Dim db As SqlDatabase = Connection.connection
Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click

    'Dim lblNodeID As Label = CType(Master.FindControl("lblParentId"), Label)
    Using conn As DbConnection = db.CreateConnection()
        Dim cmdInsertGroup As SqlCommand = db.GetSqlStringCommand("Insert Into CategoryGroups Values ('" & BLL.getNewGroupIDfromCategoryGroups & "','" & lblParentId.Text.Trim & "','" & txtGroupName.Text.Trim & "')")

       Try
        If fuGroupAttributes.HasFile Then
            fuGroupAttributes.SaveAs(IO.Path.Combine(Server.MapPath("~/Admin/SpecificationExcels"), lblParentId.Text.Trim & IO.Path.GetExtension(fuGroupAttributes.FileName)))

            Dim path As String = Server.MapPath("~/Admin/SpecificationExcels/" & lblParentId.Text.Trim & IO.Path.GetExtension(fuGroupAttributes.FileName))
            Dim strmail As String = String.Empty
            Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";Extended Properties=Excel 12.0;"
            Dim objConn As New OleDbConnection(connectionString)
            objConn.Open()
            Dim strConString As String = "SELECT * FROM [Sheet1$]"
            'where date = CDate('" + DateTime.Today.ToShortDateString() + "')";
            Dim objCmdSelect As New OleDbCommand(strConString, objConn)
            ' Create new OleDbDataAdapter that is used to build a DataSet
            ' based on the preceding SQL SELECT statement.
            Dim objAdapter1 As New OleDbDataAdapter()
            ' Pass the Select command to the adapter.
            objAdapter1.SelectCommand = objCmdSelect
            ' Create new DataSet to hold information from the worksheet.
            Dim ds As New DataSet()
            ' Fill the DataSet with the information from the worksheet.
            objAdapter1.Fill(ds, "ExcelData")
            'My Exp
            Dim _newAttributeID As Integer = BLL.getNewAttributeIDfromGroupAttributes
            Dim _newGroupID As Integer
            conn.Open()
            Dim trans As DbTransaction = conn.BeginTransaction()
            If cbInsertInExistingGroup.Checked Then
                If gvExistingGroups.SelectedValue IsNot Nothing Then
                    _newGroupID = gvExistingGroups.SelectedRow.Cells(1).Text
                Else
                    pnlMessage.Visible = True
                    pnlMessage.BackColor = Drawing.Color.Red
                    lblMessage.ForeColor = Drawing.Color.White
                    lblMessage.Font.Bold = True
                    lblMessage.Text = "Select a Group"
                    Exit Sub
                End If
            Else
                _newGroupID = BLL.getNewGroupIDfromCategoryGroups
                db.ExecuteNonQuery(cmdInsertGroup, trans)

            End If

            For i = 0 To ds.Tables(0).Rows.Count - 1
                ds.Tables(0).Rows(i).Item(0) = _newAttributeID
                ds.Tables(0).Rows(i).Item(1) = _newGroupID
                _newAttributeID = _newAttributeID + 1
            Next
            ' Clean up objects.
            objConn.Close()
            'Dim db As SqlDatabase = Connection.connection
            Dim sqlBulk As New SqlBulkCopy(conn, SqlBulkCopyOptions.Default, trans)
            sqlBulk.DestinationTableName = "GroupAttributes"
            sqlBulk.WriteToServer(ds.Tables(0))

            trans.Commit() ' commit the transaction
            pnlMessage.Visible = True
            pnlMessage.BackColor = Drawing.Color.Green
            lblMessage.ForeColor = Drawing.Color.White
            lblMessage.Font.Bold = True
            lblMessage.Text = "Successfully Uploaded"
            'Response.Redirect("~/Admin/AddSpecifications.aspx?id=" & Request.QueryString(0))
        Else
            pnlMessage.Visible = True
            pnlMessage.BackColor = Drawing.Color.Red
            lblMessage.ForeColor = Drawing.Color.White
            lblMessage.Font.Bold = True
            lblMessage.Text = "Select an Excel File"
            'Response.Write("")
        End If
        Catch ex As Exception
        trans.Rollback() ' rollback the transaction
        pnlMessage.BackColor = Drawing.Color.Red
        lblMessage.ForeColor = Drawing.Color.White
        lblMessage.Font.Bold = True
        lblMessage.Text = "Some Error Occured"
        End Try
    End Using
End Sub

1 个答案:

答案 0 :(得分:1)

您的代码有点复杂,但在此区块中您退出子而不关闭连接 objConn

If cbInsertInExistingGroup.Checked Then
    If gvExistingGroups.SelectedValue IsNot Nothing Then
        _newGroupID = gvExistingGroups.SelectedRow.Cells(1).Text
    Else
        pnlMessage.Visible = True
        pnlMessage.BackColor = Drawing.Color.Red
        lblMessage.ForeColor = Drawing.Color.White
        lblMessage.Font.Bold = True
        lblMessage.Text = "Select a Group"
        Exit Sub
End If

你应该尝试在更小的单元中重构这个庞大的代码块。通过这种方式,您可以使用Using语句正确处置Disposable对象,如OleDbConnection,OleDbAdapter,OleDbCommand ....