C# 使用PostgreSQL连接的好方法

C# 使用PostgreSQL连接的好方法,c#,.net,postgresql,theory,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 co

我正在使用
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
{

私有NpgsqlConnection conn;//conn.Close();//在我看来,您应该在需要连接时打开连接,然后立即关闭。这将防止服务器上的许多连接保持活动状态


根据我的经验,打开连接不需要那么多时间(几毫秒,通常是执行时间的一小部分),因此您不必太担心。

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

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

应该是更好的选择。

您可能应该添加您希望查询数据库的频率。@JakubKania刚刚添加了它,每秒查询100-200次。
Npgsql
具有内置的连接池,因此无论您如何执行查询,连接都不会完全关闭和打开,即使您调用
Close()
打开()
。但它是桌面应用程序吗?查询是并发的吗?您是否运行了性能跟踪以确定这是否真的是一个问题?大多数提供程序都会进行连接池。如果使用不同步,您可能会导致连接池不足,但您应该始终进行适当的性能测试,而不是假设一种方法优于另一种方法。默认情况下,我倾向于晚开早关,我从来没有注意到这段代码出现在热门曲目中。