2017-01-24 6 views
0

Я уже проверил here.Лучший способ обработки соединения открыть и закрыть с помощью цикла For

Я каждый раз перебираю соединение, и я не уверен, что ASP.NET обрабатывает его с ударом производительности или что он распознает этот код и автоматически его оптимизирует. То, что я есть сейчас:

For i As Integer = 0 To 100 
    cmd = New SqlCommand("UPDATE <table> where [email protected]", myConnection) 
    cmd.Parameters.Add(New SqlParameter("@id", i)) 
    Try 
     myConnection.Open() 
     cmd.ExecuteNonQuery() 
    Catch ex As Exception 
    Finally 
     myConnection.Close() 
    End Try 
Next i 

Как я могу изменить этот код так, чтобы он не открывает соединение каждый раз? Привести закрытие и открытие за пределами петли For? Провести проверку существования открытого соединения в цикле? Мне бы хотелось увидеть образец кода для лучшей практики.

ответ

0

Прежде всего, открытие и закрытие соединения в VB.NET фактически не открывает и не закрывает подключения к базе данных. Вместо этого они будут извлекать и возвращать соединения из пула соединений и в пул соединений. Таким образом, несмотря на некоторое влияние на производительность, он довольно минимален.

Это, как говорится, вы можете повторно использовать соединение, возможно, с кодом, как это:

myConnection.Open() 
For i As Integer = 0 To 100 
    cmd = New SqlCommand("UPDATE <table> where [email protected]", myConnection) 
    cmd.Parameters.Add(New SqlParameter("@id", i)) 
    cmd.ExecuteNonQuery() 
Next i 
myConnection.Close() 

Вы должны, конечно, добавить попробовать/поймать/наконец или какой-либо другой механизм, чтобы гарантировать, что myConnection.Close() запускается на выполнение в любом случае. Это обеспечит возврат соединения в пул. Соединение не будет фактически закрываться, если оно не истечет.

+0

Спасибо! К вашему моменту: чтобы убедиться, что соединение всегда закрыто, мне нужно будет добавить весь цикл 'For' в блок' Try' правильно? И не повлияет ли это на производительность даже больше, чем мой текущий код? – Flo

+1

Правильно, вы можете добавить Try/Catch/Finally вокруг всего, и это не повлияет на производительность. –