C# 和 PostgreSQL 中已有太多客户端

Gia*_*era 2 c# postgresql database-connection connection-pooling

我在 C# 和 PostgreSQL 中出现错误“Too Many Clients Already”,我做错了什么吗?

这是我的主要代码

public class NationalService
{
    private NpgsqlConnection conn;
    protected string query;
    public NationalService()
    {
        this.conn = ConnectionService.GetConnection();
    }

    public string GetNamaWilayah(string kodePropinsi, string kodeKabupaten)
    {
        this.query = "select namakabupaten from dim_gab_wilayah where kodepropinsi='" + kodePropinsi + "' and kodekabupaten='" + kodeKabupaten + "' group by namakabupaten";
        string namaKabupaten;
        using (NpgsqlCommand command = new NpgsqlCommand(this.query, this.conn))
        {
            using (NpgsqlDataReader dr = command.ExecuteReader())
            {
                while (dr.Read())
                {
                    namaKabupaten = dr["namakabupaten"].ToString();
                    return namaKabupaten;
                }
            }
        }
        return string.Empty;         
    }
Run Code Online (Sandbox Code Playgroud)

}

这就是我建立联系的方式

public class ConnectionService
{
    public static NpgsqlConnection GetConnection()
    {
        string connStr = WebConfigurationManager.ConnectionStrings["local"].ConnectionString;
        NpgsqlConnection conn = new NpgsqlConnection(connStr);            
        conn.Open();
        return conn;
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有写像 conn.close(); 这样的东西 但我在使用中写了 conn.Open 。

临时我已将 postgresql.conf 中的 max_connections = 100 更改为 1000

你能给我提示吗?

提前致谢

Aru*_*hny 5

当创建该类的新实例时,您将创建与服务器的新连接NationalService,但这些连接永远不会关闭。您需要向类添加一个 clean 方法,该方法将在实例被销毁之前调用,在该方法中您必须通过调用 close() 方法来释放连接。

当服务器被要求创建比其配置维持的连接更多的连接时,就会出现“太多客户端”异常。

我不是 C# 开发人员,而是 Java 开发人员。

以同样的方式检查您正在使用的dataReader是否也需要关闭。

我强烈建议您在生产部署中使用连接池库,而不是自己创建和维护连接。