C# 我应该为事件处理程序保留打开的数据库连接吗?

C# 我应该为事件处理程序保留打开的数据库连接吗?,c#,postgresql,connection-pooling,C#,Postgresql,Connection Pooling,我正在用C语言编写一个应用程序,它将通过ODBC连接到PostgreSQL数据库。数据库将与我的应用程序位于同一台计算机上。我的应用程序将有一个事件处理程序,它可以每秒触发几次。处理程序将向数据库表中写入两个值。我想知道是否应该在应用程序启动以供事件处理程序使用时打开一次数据库连接,或者是否应该在事件处理程序内部打开它,并在处理程序完成其工作时关闭它 如果使用连接池,这个问题就没有意义了,因为如果有可用的连接,就会一直使用现有的连接,我可以打开和关闭连接,而不必担心会减慢我的应用程序。但是,Po

我正在用C语言编写一个应用程序,它将通过ODBC连接到PostgreSQL数据库。数据库将与我的应用程序位于同一台计算机上。我的应用程序将有一个事件处理程序,它可以每秒触发几次。处理程序将向数据库表中写入两个值。我想知道是否应该在应用程序启动以供事件处理程序使用时打开一次数据库连接,或者是否应该在事件处理程序内部打开它,并在处理程序完成其工作时关闭它

如果使用连接池,这个问题就没有意义了,因为如果有可用的连接,就会一直使用现有的连接,我可以打开和关闭连接,而不必担心会减慢我的应用程序。但是,PostgreSQL的ODBC驱动程序似乎不支持连接池。还是这样

我使用的是PostgreSQL Unicode驱动程序版本9.03.04.00

非常感谢。

不要为每个请求打开和关闭数据库连接。只要交通量很少,它就可以工作,但如果不是这样的话,它将是灾难的预兆


您可以使用像pgBadger这样的外部连接池,但如果在您的情况下这是一种过分的做法,只需保持连接打开即可。每秒写入数次显然是正确的做法。

当本机驱动程序可用时,为什么要使用ODBC?要关闭并重新打开的唯一原因是数据库连接容量不足。这有可能吗?史蒂夫,我想提一下。我们使用ODBC是因为一些客户希望使用PostgreSQL以外的数据库提供程序,而且只要有ODBC驱动程序,我们就不必更改应用程序。Hoodaticus,我更关心的是速度。我不希望打开和关闭数据库最终成为一个傻瓜。我建议使用某种ORM来管理数据库详细信息,比如使用的提供者。例如,对于EntityFramework,您应该不会遇到这个问题(使用不同数据库系统的用户),除非您使用一些其他系统中不可用的非常特定的供应商功能。(但无论是否使用ODBC,切换数据库系统都会遇到问题)