【发布时间】:2023-03-29 23:19:01
【问题描述】:
我正在使用 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 个查询。
【问题讨论】:
-
您可能应该添加查询数据库的频率。
-
@JakubKania 刚刚添加,每秒 100-200 个查询。
-
Npgsql具有内置的连接池,因此无论您如何进行查询,即使您调用Close()和Open(),连接也不会完全关闭和打开。但它是桌面应用程序吗?查询是并发的吗? -
您是否运行过任何性能跟踪来查看这是否真的是一个问题?大多数提供商都进行连接池。如果您的使用不是同步的,您可能会饿死池,但您应该始终进行适当的性能测试,而不是假设一种方式比另一种方式更好。默认情况下,我倾向于迟到早关,而且我从未注意到此代码出现在热门曲目中。
标签: c# .net postgresql theory