2012-01-27 38 views
6

Tôi đã là ứng dụng khách C# cần kiểm tra bảng trên db Postgres sau mỗi 15 phút. Vấn đề là tôi cần phải cài đặt máy khách này vào nhiều hơn hoặc ít hơn 200 máy khách, vì vậy, tôi cần phải đóng kết nối DB sau khi truy vấn.Kết nối vẫn không hoạt động sau khi đóng

Tôi sử dụng .Close() nhưng, nếu tôi kiểm tra bảng pg_stat_activity trên Postgres DB, tôi có thể thấy kết nối vẫn mở trong trạng thái IDLE. Làm thế nào tôi có thể khắc phục vấn đề đó? Có thể đóng chắc chắn kết nối không?

cảm ơn, Andrea

+0

Tôi muốn hiểu nếu để trạng thái không hoạt động là một vấn đề. Tôi chỉ tò mò thôi! – Ismael

+0

với số kết nối tối đa là 100 và 200 máy khách, có, nó là :) –

+0

Một cách tiếp cận khác cho cùng một vấn đề là phải có 100-200 khách hàng kết nối với một ứng dụng máy chủ duy nhất mà bạn viết (có lẽ là một ứng dụng web trên IIS) và sau đó trở thành khách hàng đơn lẻ của cơ sở dữ liệu. Trong số những thứ khác, nó cho phép bạn khóa lại postgresql nhiều hơn. Với cách tiếp cận đó bạn muốn hoàn tác những gì tôi đề xuất trong câu trả lời của tôi, bởi vì bạn muốn tổng hợp để có nghĩa là một số ít các kết nối được chia sẻ giữa tất cả 100-200 người dùng đó. –

Trả lời

10

Giống như hầu hết các nhà cung cấp ADO.NET, Npgsql sử dụng kết nối tổng hợp theo mặc định. Khi bạn Close() đối tượng NpgsqlConnection, một đối tượng bên trong đại diện cho kết nối cơ bản thực tế mà việc sử dụng Npgsql đi vào một nhóm sẽ được sử dụng lại, tiết kiệm chi phí cho việc tạo một thứ không cần thiết khác. (Xem What does "opening a connection" actually mean? để biết thêm).

Điều này phù hợp với hầu hết các ứng dụng, vì thông thường bạn muốn sử dụng kết nối nhiều lần trong khoảng thời gian một giây.

Nó không phù hợp với bạn, nhưng nếu bạn bao gồm tùy chọn Pooling=false trong chuỗi kết nối, nó sẽ ghi đè mặc định này và Close() thực sự sẽ đóng kết nối thực.

+4

Đó là lý do tôi thích trang web này! Resposne nhanh từ những người rất có tay nghề cao! Cảm ơn đã giúp đỡ! –

+0

Có khả năng dừng bỏ phiếu và đóng tất cả các kết nối "nền" khi tắt máy không? –

+0

@DominicJonas đã xảy ra khi tắt máy. –

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