Hãy nhớ tất cả điều này là trong bối cảnh của hệ sinh thái .Net.
Các nhà phát triển đôi khi muốn "tối ưu hóa" mã của họ để sử dụng lại các đối tượng kết nối của họ. Với bối cảnh của câu hỏi này, điều này gần như luôn luôn là một sai lầm.
ADO.Net có một tính năng gọi là Kết nối tổng hợp . Khi bạn tạo và mở một đối tượng kết nối mới, những gì bạn thực sự đang làm là yêu cầu kết nối từ một nhóm. Khi bạn đóng một kết nối, bạn trả nó về hồ bơi.
Điều quan trọng là phải hiểu các đối tượng chúng ta sử dụng trực tiếp trong mã: SqlConnection, MySqlConnection, OleDbConnectio, v.v., tất cả chỉ là các trình bao bọc xung quanh một kết nối cơ bản thực sự được quản lý bởi ADO.Net và các kết nối thực của ADO.Net "nặng" hơn và đắt hơn từ quan điểm hiệu suất. Đó là những đối tượng cơ bản có các mối lo ngại như xác thực, truyền mạng, mã hóa và những thứ đó vượt xa số lượng bộ nhớ nhỏ trong đối tượng bạn thực sự nhìn thấy trong mã của riêng bạn.
Khi bạn cố gắng sử dụng lại đối tượng kết nối của mình, bạn sẽ phá vỡ khả năng ADO.Net để quản lý hiệu quả các kết nối cơ bản quan trọng. Bạn đạt được hiệu quả trong việc nhỏ với chi phí của điều lớn hơn nhiều.
Việc sử dụng lại kết nối qua một ứng dụng hoặc yêu cầu http cũng có thể buộc bạn vô tình nối tiếp thứ gì đó có thể chạy song song và trở thành nút cổ chai hiệu năng. Tôi đã thấy điều này xảy ra trong các ứng dụng thực tế.
Trong trường hợp ví dụ về trang web ở đây, nơi bạn ít nhất chỉ giữ kết nối nhỏ trong suốt thời gian của một yêu cầu / phản hồi http, bạn có thể đạt được hiệu quả cao hơn bằng cách đánh giá những truy vấn nào bạn chạy trong đường dẫn yêu cầu của mình và thử nhận chúng xuống càng ít yêu cầu riêng biệt đến cơ sở dữ liệu càng tốt (gợi ý: bạn có thể gửi nhiều truy vấn trong một chuỗi SQL và sử dụng DataReader.NextResult()
hoặc kiểm tra các bảng khác nhau DataSet
để di chuyển giữa chúng).
Nói cách khác, thay vì suy nghĩ về việc sử dụng lại một kết nối cho một ứng dụng hoặc yêu cầu http so với một kết nối cho mỗi truy vấn, hãy nghĩ về một kết nối cho mỗi lần bạn gọi ra cơ sở dữ liệu ... mỗi chuyến đi khứ hồi. Sau đó cố gắng giảm thiểu số lượng kết nối bằng cách giảm thiểu số lượng các chuyến đi đó. Bằng cách này, bạn có thể đáp ứng cả hai mục tiêu.
Nhưng đó chỉ là một loại tối ưu hóa. Ngoài ra còn tối ưu hóa thời gian lập trình viên và đạt được việc sử dụng lại mã hiệu quả. Các nhà phát triển không muốn viết đi viết lại cùng một mã nồi hơi để có được một đối tượng kết nối mở và sẵn sàng sử dụng. Nó không chỉ tẻ nhạt, đó là một cách để giới thiệu các lỗi vào một chương trình.
Mặc dù ở đây, nói chung, tốt hơn là có một kết nối cho mỗi truy vấn (hoặc chuyến đi khứ hồi). Có những mẫu khác mà bạn có thể sử dụng để giúp tránh viết lại mã soạn sẵn. Đây là một ví dụ tôi thích, nhưng có nhiều ví dụ khác.