与PostgreSQL连接的好技巧

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

你可能应该添加查询数据库的频率。 - Jakub Kania
@JakubKania 刚刚添加了它,每秒100-200个查询。 - Patryk Golebiowski
2
Npgsql具有内置的连接池,因此无论您如何查询,即使调用Close()Open(),连接也不会完全关闭和打开。但这是一个桌面应用程序吗?查询是否并发进行? - Sami Kuhmonen
1
你是否运行过性能跟踪以查看这是否真的是一个问题?大多数提供程序都使用连接池。如果您的使用不是同步的,您可能会饿死池,但您应该始终进行适当的性能测试,而不是假设一种方法比另一种方法更好。默认情况下,我倾向于晚开早关,并且从未注意到此代码出现在热轨迹中。 - Adam Houldsworth
2个回答

6

PostgreSQL支持连接池(池大小可自定义),因此常见模式为:

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

应该选择更好的选择。

5

我认为你应该在需要连接的时候打开它,并在使用完之后立即关闭。这样可以避免许多服务器上一直保持连接。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接