我正在使用Npgsql
通过.NET访问PostgreSQL。我担心执行数据库连接的正确方法,因为在我看来,打开连接然后每次想要执行某些事务时关闭它都是一项昂贵的操作。
所以这是一般的想法:
public class PostgreSQL
{
private NpgsqlConnection conn; // <- one connection for this object, open all the time
public PostgreSQL(string connString)
{
conn = new NpgsqlConnection(connString);
conn.Open();
}
// ...here making some queries...
public void Close() => conn.Close(); // <- use this in the very end of the program
}
如上所示,我有一个PostgreSQL
类实例的连接。
我的问题:
这种方法对吗?或者我应该在每次想要进行交易时打开和关闭连接 - 尽可能晚地打开并尽快关闭?
如果我每次都应该打开和关闭连接 - 我应该编写一个限制并发连接数量的队列吗?或者PostgreSQL会自己处理它 - 理论上,我可以打开200个连接,它会没问题。
请与我分享您的经历^^
修改 我将每秒运行100-200个查询。
答案 0 :(得分:4)
在我看来,你应该在你需要的时候打开一个连接,并在它之后立即关闭它。这样可以防止服务器上的很多连接保持活动状态。
根据我的经验,打开一个连接并不需要花费太多时间(几毫秒,通常是执行时间的一小部分),所以你不必太担心。
答案 1 :(得分:4)
PostgreSQL支持连接池(池大小为customizable),因此常见模式:
using (NpgsqlConnection conn = new NpgsqlConnection(...))
{
...
}
应该是更好的选择。