簡體   English   中英

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

[英]Too Many Clients Already in C# and PostgreSQL

我在C#和PostgreSQL中出現錯誤“已經有太多客戶端”我做錯了嗎?

這是我的主要代碼

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;         
    }

}

這就是我獲得聯系的方式

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

我沒有寫類似conn.close()的東西; 但是我被寫成conn.Open在使用中。

對於臨時我在postgresql.conf中將max_connections = 100更改為1000

你能給我提示嗎?

提前致謝

每當創建類NationalService的新實例時,您都在與服務器建立新連接,但是這些連接永遠不會關閉。 您需要在將要銷毀實例之前在類中添加一個clean方法,在該方法中,您必須通過調用close()方法來釋放連接。

出現“已經有太多客戶端”的異常,要求服務器創建比配置要維護的連接更多的連接。

我不是C#開發人員,而是Java開發人員。

以同樣的方式檢查您正在使用的dataReader是否也需要關閉。

我強烈建議您在生產部署中使用連接池庫,而不要自己創建和維護連接。

您永遠不會關閉連接。 那就是問題所在。 每個請求都會打開新的連接。 這就是為什么您會收到“已有太多客戶”錯誤的原因。

我沒有寫類似conn.close()的東西; 但是我被寫成conn.Open在使用中。

Conn.open與使用無關。 如果您正在使用中創建連接,則可能會有所幫助。 即使它只調用dispose()。

所以最好在手術后關閉您的連接,這就是推薦的方式。

重寫代碼,以便“使用”聲明連接而不是命令。 這樣,它將在退出using塊后立即進行處理。

我對C#一無所知,但是您必須在使用它之后一定要關閉該連接。 您是否可以驗證在第100(1000)次調用函數會產生“連接過多”錯誤? 我建議您在此處使用“租賃模式”。 通常,這可以幫助您在資源使用后清理它們。 Spring.NET可能會滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM