与PostgreSQL连接的良好技术

时间:2015-05-26 12:43:31

标签: c# .net postgresql theory

我正在使用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个查询。

2 个答案:

答案 0 :(得分:4)

在我看来,你应该在你需要的时候打开一个连接,并在它之后立即关闭它。这样可以防止服务器上的很多连接保持活动状态。

根据我的经验,打开一个连接并不需要花费太多时间(几毫秒,通常是执行时间的一小部分),所以你不必太担心。

答案 1 :(得分:4)

PostgreSQL支持连接池(池大小为customizable),因此常见模式:

using (NpgsqlConnection conn = new NpgsqlConnection(...))
{
...
}

应该是更好的选择。