아니요, SqlCommand
을 처분해도 Connection에 영향을 미치지 않습니다. 더 나은 방법은 또한뿐만 아니라 사용하여 블록에서 SqlConnection
를 포장하는 것 :
using (SqlConnection conn = new SqlConnection(connstring))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(cmdstring, conn))
{
cmd.ExecuteNonQuery();
}
}
그렇지 않으면, 연결은 사실에 의해 변경되지 않습니다 그 그것은 어쩌면 그게 당신이 원하는 것 (배치되었다 사용 된 명령?). 하지만 Connection은 도 처리해야하며 명령보다 처리하는 것이 더 중요 할 수 있습니다.
EDIT : 그냥이 테스트
다음 블록이 사용 종료 때
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 1", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 2", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
conn.Dispose();
첫 번째 명령을 배치 하였다. 연결은 여전히 열려 있었고 두 번째 명령에 적합했습니다.
따라서 명령을 삭제해도 사용중인 연결은 확실히 삭제되지 않습니다.
SqlCommand com을 삭제 한 후에는 해당 Connection 인스턴스가 루트가 지정되지 않습니다 (아무것도 사용하지 않음). GarbageCollector가 SqlConnection 인스턴스를 마무리하면 연결이 삭제되지 않습니까? 내가 생각하기에 연결은 cmd 만 참조하기 때문입니다. – mecek
그럴 경우 @Mecek, 메모리가 gen0에서 gen1로 승격되는 최종화를 거치므로 열심히 해방 될 것입니다. –