我有一个C#客户端应用程序需要每15分钟检查一次Postgres数据库上的表。问题是我需要将此客户端安装到或多或少200个客户端,因此我需要在查询后关闭数据库连接。
我使用.Close()方法但是,如果我检查Postgres DB上的pg_stat_activity表,我可以看到连接仍处于IDLE状态。我该如何解决这个问题?是否有可能完全关闭连接?
感谢, 安德莉亚
答案 0 :(得分:15)
与大多数ADO.NET提供程序一样,Npgsql默认使用连接池。当Close()
NpgsqlConnection
对象时,表示Npgsql使用的实际底层连接的内部对象进入要重用的池,从而节省了不必要地创建另一个的开销。 (有关详细信息,请参阅What does "opening a connection" actually mean?。)
这很适合大多数应用程序,因为在一秒钟内想要多次使用连接是很常见的。
它根本不适合您,但如果您在连接字符串中包含选项Pooling=false
,它将覆盖此默认值,Close()
将确实关闭实际连接。