5

Ứng dụng của tôi có vấn đề về hiệu suất, vì vậy tôi bắt đầu điều tra vấn đề này từ gốc: "Kết nối với cơ sở dữ liệu".Để đóng hay không đóng một kết nối Oracle?

Các thực hành tốt nhất nói: "Mở một kết nối, sử dụng nó và gần gũi là càng sớm càng tốt", nhưng tôi không biết overhead rằng điều này gây ra, vì vậy câu hỏi là:

1 - "Open, Sử dụng , Đóng các kết nối càng sớm càng tốt là aproach tốt nhất sử dụng ODP.NET? "

2 - Có cách nào và cách sử dụng kết nối tổng hợp với ODP.NET không? Tôi đang nghĩ đến việc tạo Danh sách để lưu trữ một số chuỗi kết nối và tạo logic để chọn kết nối "tốt nhất" mỗi lần tôi cần. Đây có phải là cách tốt nhất để làm điều đó không?

+2

Bạn đang nói về ứng dụng khách/máy chủ? Hoặc một ứng dụng ba tầng? Bạn có nói rằng bạn đã lược tả ứng dụng và xác định rằng các kết nối cơ sở dữ liệu mở và đóng là một nút cổ chai? Hoặc là bạn chỉ đoán rằng các vấn đề hiệu suất có thể là cơ sở dữ liệu liên quan? –

+1

Thực hành tốt nhất của ai là điều này? Việc mở một kết nối đến cơ sở dữ liệu là một hoạt động tốn kém và tốn thời gian.Do đó, lời khuyên tốt nhất là duy trì kết nối mở và sử dụng càng lâu càng tốt. – APC

+0

Justin. Có, Nó là một ứng dụng Asp.Net, vì vậy nó là client/server, với 3 hoặc 4 tầng, "Open Connection Operation" không phải là nút cổ chai nhưng tôi đoán nó góp phần làm giảm hiệu năng (nếu không sử dụng đúng). – Ewerton

Trả lời

6

Đây là một boong trượt chứa Oracle khuyến cáo thực hành tốt nhất:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

Bạn sẽ tự động nhận được một hồ bơi kết nối khi bạn tạo một OracleConnection. Đối với hầu hết các ứng dụng tầng trung lưu, bạn sẽ muốn tận dụng điều đó. Bạn cũng sẽ muốn điều chỉnh hồ bơi của bạn cho một khối lượng công việc thực tế bằng cách bật Bộ đếm hiệu suất trong sổ đăng ký.

Vui lòng xem trợ giúp trực tuyến ODP.NET để biết chi tiết về kết nối tổng hợp. Cài đặt nhóm được thêm vào chuỗi kết nối.

Một vấn đề khác mà mọi người gặp phải rất nhiều với OracleConnections là bộ thu gom rác không nhận ra mức độ thâm nhập tài nguyên thực sự và không làm sạch chúng kịp thời. Điều này là phức tạp bởi thực tế là ODP.NET không được quản lý đầy đủ và do đó một số tài nguyên được ẩn khỏi bộ thu gom rác. Do đó thực hành tốt nhất là Close() AND Dispose() tất cả các đối tượng Oracle ODP.NET (bao gồm OracleConnection) để buộc chúng phải được dọn sạch.

vấn đề cụ thể này sẽ được giảm nhẹ trong cung cấp dịch vụ quản lý hoàn toàn của Oracle (một phiên bản beta sẽ được ra trong thời gian ngắn)

(EDIT: ODP.NET, Driver Managed bây giờ đã có.)

Christian Shay

Oracle

1

ODP.NET là nhà cung cấp dữ liệu cho ADO.NET. Cách thực hành tốt nhất cho ADO.Net là Mở, Nhận dữ liệu (vào bộ nhớ), đóng, sử dụng trong dữ liệu bộ nhớ. Ví dụ bằng cách sử dụng một OracleDataReader để tải dữ liệu trong một DataTable trong bộ nhớ và kết nối chặt chẽ.

[] 's

0

Đối với một giao dịch duy nhất, điều này là tốt nhất nhưng đối với nhiều giao dịch mà bạn cam kết ở cuối, đây có thể không phải là giải pháp tốt nhất. Bạn cần phải giữ kết nối mở cho đến khi giao dịch được thực hiện hoặc quay lại. Làm thế nào để bạn quản lý đó và cũng làm thế nào để bạn kiểm tra kết nối vẫn còn tồn tại trong trường hợp đó? (Tức là mạng thất bại) Có tài sản ConnectionState.Broken mà không làm việc tại thời điểm này.

Các vấn đề liên quan