2012-01-27 140 views
6

我有一个C#客户端应用程序需要每15分钟检查Postgres数据库上的表。问题是我需要将这个客户端安装到或多或少的200客户端中,因此我需要在查询后关闭数据库连接。关闭后连接仍然空闲

我使用.Close()方法,但是,如果我检查Postgres DB上的pg_stat_activity表,我可以看到连接在IDLE状态下仍然打开。我该如何解决这个问题?是否有可能关闭连接?

感谢, 安德烈

+0

我想了解,如果让它闲置状态是一个问题。我只是好奇! – Ismael 2012-01-27 13:28:30

+0

,最大连接数为100和200个客户端,是的,它是:) – 2012-01-27 14:15:07

+0

解决同一问题的另一种方法是让100-200客户端连接到您编写的单个服务器应用程序(也许是IIS上的Web应用程序) ,然后成为数据库的单个客户端。除此之外,它允许你更多地锁定postgresql。采用这种方法,您希望撤销我在答案中提出的建议,因为您希望共享是指所有这100-200个用户之间共享少数连接。 – 2012-01-27 14:34:25

回答

10

最喜欢的ADO.NET提供者,通过Npgsql的默认使用连接池。当你对Close()NpgsqlConnection对象,一个表示Npgsql使用的实际底层连接的内部对象进入一个池以重用时,节省了不必要地创建另一个的开销。 (有关更多信息,请参阅What does "opening a connection" actually mean?)。

这很适合大多数应用程序,因为它通常希望在第二个空间中多次使用连接。

它根本不适合您,但如果在连接字符串中包含选项Pooling=false,它将覆盖此默认值,并且Close()确实会关闭实际连接。

+4

这就是我喜欢这个网站的原因!从非常熟练的人快速resposne!谢谢您的帮助! – 2012-01-27 12:59:07

+0

是否有可能在停机时停止轮询并关闭所有“背景”连接? – 2017-06-21 09:36:45

+0

@DominicJonas在关机时应该已经发生。 – 2017-06-21 10:16:46

相关问题