Как решить максимальный размер пула - ASP.NET

Public Function QueryDataSet(ByVal strSQL As String) As DataSet
    Dim ds As New DataSet
    Dim dtAdapter As New SqlDataAdapter
    objConn = New SqlConnection
    With objConn
        .ConnectionString = strConn
        .Open()
    End With
    objCmd = New SqlCommand
    With objCmd
        .Connection = objConn
        .CommandText = strSQL
        .CommandType = CommandType.Text
    End With
    dtAdapter.SelectCommand = objCmd
    dtAdapter.Fill(ds)

    objConn.Close()
    objConn.Dispose()
    SqlConnection.ClearPool(objConn)
    objConn = Nothing
    Return ds 
End function

Вышеупомянутое находится в классе

Как я могу исправить мою функцию, которая решает, что максимальный размер пула заполнен на моем сервере?

Пожалуйста, помогите мне.


person Nakarin Karnsubwedchkij    schedule 30.12.2016    source источник
comment
возможный дубликат stackoverflow.com/questions /15848239/   -  person Genish Parvadia    schedule 30.12.2016
comment
Пожалуйста, скопируйте/вставьте точное сообщение об ошибке   -  person Nick.McDermaid    schedule 30.12.2016
comment
Возможный дубликат Как можно ли решить проблему с пулом соединений между ASP.NET и SQL Server?   -  person Chetan Sanghani    schedule 30.12.2016
comment
У вас утечка соединения. Вы неправильно закрываете соединения. Используйте оператор Using и исправьте свой код вместо того, чтобы пытаться скрыть ошибку. Если вы увеличиваете количество открытых подключений, вы увеличиваете ресурсы, используемые на сервере без причины, увеличиваете вероятность конфликтов и, в конечном итоге, снижаете пропускную способность сервера.   -  person Panagiotis Kanavos    schedule 30.12.2016
comment
Если что-то пойдет не так, ваш метод завершает работу, не закрывая соединение. Исправьте это, используя Using objConn = New SqlConnection .... Пул соединений не нарушен   -  person Panagiotis Kanavos    schedule 30.12.2016


Ответы (1)


Используйте следующий код

Public Function QueryDataSet(ByVal strSQL As String) As DataSet
    Dim ds As New DataSet
    Dim dtAdapter As New SqlDataAdapter
Try
    objConn = New SqlConnection
    With objConn
        .ConnectionString = strConn
        .Open()
    End With
    objCmd = New SqlCommand
    With objCmd
        .Connection = objConn
        .CommandText = strSQL
        .CommandType = CommandType.Text
    End With
    dtAdapter.SelectCommand = objCmd
    dtAdapter.Fill(ds)

    objConn.Close()
    objConn.Dispose()
    SqlConnection.ClearPool(objConn)
    objConn = Nothing

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally

    objConn.Close()
    objConn.Dispose()
    SqlConnection.ClearPool(objConn)
    objConn = Nothing

End Try

    Return ds 
End function

или добавьте MaxPoolSize=abc в строку подключения.

person Arjun Singh    schedule 30.12.2016
comment
Намного лучшим решением было бы убедиться, что соединения закрываются с помощью оператора Using. Увеличение размера пула просто скрывает утечку соединения и по-прежнему снижает пропускную способность сервера. - person Panagiotis Kanavos; 30.12.2016
comment
Спасибо, Арджун, я попробую. Прежде чем я опубликую вопрос, я уже исправил MaxPoolSize = 1000 в строке подключения. - person Nakarin Karnsubwedchkij; 04.01.2017