0

我正在使用 azure postgres sql,我有一种常用方法可以提供连接字符串,

protected readonly string databaseConnString = "Host={0}.postgres.database.azure.com;Username={1}@{2};Password={3};DB={4};Ssl Mode=Require";
    

 protected virtual async Task<NpgsqlConnection> GetDBConnection()
    {
        var connString = string.Empty;
        NpgsqlConnection conn;

        try
        {
            //certificate check
            conn = new NpgsqlConnection(databaseConnString);

            try
            {
                //open the connection
                await conn.OpenAsync();
            }
            catch (PostgresException ex)
            {
                
            }
            finally
            {
                //close the connection
                await conn.CloseAsync();
            }
        }
        
        //return connection string
        return conn;
    }

当我再次使用打开/关闭连接时,我在应用程序的任何地方都在使用上面的连接字符串,

   using (var conn = await GetDBConnection())
        {
          await conn.OpenAsync();
          //do the work
          await conn.CloseAsync();
        }

我正在使用npgsql .net core library并开始知道这 PgBouncer在这里无济于事。如何最小化连接打开/关闭并实现连接池?

4

1 回答 1

2

Pooling=true连接字符串控制,但默认情况下它是打开的。

  • 当您调用NpgsqlConnectiona.Open物理连接时,将从池中获取(如果存在),您无需执行任何操作。

  • 处置 NpgsqlConnection时,它将返回到池中以供重复使用。

默认情况下,您无需做任何事情或担心。

汇集文档

在此处输入图像描述

于 2020-09-07T06:20:54.640 回答