![](/img/trans.png)
[英]PostgreSQL: Load testing throws error - Npgsql.PostgresException: '53300: sorry, too many clients already'
[英]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.