每个 SQL 命令的 Open/Close 数据库在 ASP.NET 核心中
Open/Close database in ASP.NET Core for every SQL command
我编写了简单的 ASP.NET 核心应用程序,其中 Controller 注入 MyService(配置为 Scoped),后者又注入 MyDbContext。
在我的控制器方法中,我有 2 个数据库查询,我的调试输出如下所示:
Executing action method...
Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
...
Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
...
Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
Request finished in...
问题是:在每个请求上打开一个新连接是否正确,甚至更多 - 为每个 sql 命令打开一个新连接?它不能建立一次与数据库的连接并重新使用它吗?性能不是更好吗?
PS:我将 PostgreSQL 与 npgsql 提供程序一起使用
就像别人提到的那样。连接池是你的朋友。
开闭完全没问题
如前所述,始终打开和关闭连接all over SO. Connection pooling 处理您的性能问题。
使您的代码更易于阅读,您永远不必担心,我必须打开的那个连接在哪里,它打开了吗?别的地方不是关门了吗?
如你所问,我想你真的不想。这就是我通常做的。一个小型包装器方法,可以触发您的 sql 命令,与此类似。
static bool FireCommand(SqlCommand command)
{
command.Connection.Open();
command.ExecuteQuery();
command.Connection.Close();
}
我编写了简单的 ASP.NET 核心应用程序,其中 Controller 注入 MyService(配置为 Scoped),后者又注入 MyDbContext。
在我的控制器方法中,我有 2 个数据库查询,我的调试输出如下所示:
Executing action method...
Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
...
Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
...
Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
Request finished in...
问题是:在每个请求上打开一个新连接是否正确,甚至更多 - 为每个 sql 命令打开一个新连接?它不能建立一次与数据库的连接并重新使用它吗?性能不是更好吗?
PS:我将 PostgreSQL 与 npgsql 提供程序一起使用
就像别人提到的那样。连接池是你的朋友。
开闭完全没问题
如前所述,始终打开和关闭连接all over SO. Connection pooling 处理您的性能问题。
使您的代码更易于阅读,您永远不必担心,我必须打开的那个连接在哪里,它打开了吗?别的地方不是关门了吗?
如你所问,我想你真的不想。这就是我通常做的。一个小型包装器方法,可以触发您的 sql 命令,与此类似。
static bool FireCommand(SqlCommand command)
{
command.Connection.Open();
command.ExecuteQuery();
command.Connection.Close();
}