Tôi đã nghi ngờ rằng kết nối cơ sở dữ liệu được sử dụng trong một trong các ứng dụng của chúng tôi không phải lúc nào cũng đóng. Tôi đã đi xem mã và tôi đã tìm thấy một lớp DataProvider
có đối tượng SqlConnection
. Kết nối được mở trong constructor của lớp này và đóng trong phương thức Dispose
(đừng phán xét điều đó, tôi biết việc giữ kết nối mở là điều ác, nó không phải là mã của tôi và nó cũng không phải là vấn đề). Phương pháp Dispose
được thực hiện như thế này:Việc đóng kết nối cơ sở dữ liệu trong phương thức Vứt bỏ có đúng không?
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_conn != null)
_conn.Close();
}
_disposed = true;
}
}
Câu hỏi đặt ra là:
Liệu nó luôn đảm bảo rằng kết nối được đóng cửa?
Mã này có đúng không?
Tôi nghĩ rằng cần có _conn.Dispose()
được gọi - tôi có đúng không và có thể ảnh hưởng đến việc không đóng kết nối (có thể là không)?
Nếu bạn nghi ngờ xác nhận bằng cách kiểm tra bằng cách sử dụng bộ đếm hiệu suất. – RichardOD
Giá trị quan trọng cần kiểm tra là NumberOfPooledConnections. – RichardOD