我正在修改 Winforms 应用程序以使用连接池,以便数据访问可以在后台线程中进行。业务逻辑是在 PL/SQL 中实现的,并且必须调用几个与安全相关的存储过程才能使用业务逻辑。
我需要的是一种方法来判断连接是否已被使用,而无需往返数据库。我认为我无法在 HashSet
中跟踪它们,因为我怀疑 Equals
甚至 ReferenceEquals
是否可靠。有什么想法吗?
编辑:
需要明确的是,我计划使用 ODP.NET 的内置连接池机制。如果我推出自己的连接池,那么跟踪哪些连接是新的、哪些是已使用的将非常简单。
最佳答案
ODP.NET 提供的连接池是完全不透明的。也就是说,它并没有像我希望的那样泄漏 - 无法知道连接是否以前使用过或者是全新的。然而,从另一种角度来说,它是一个有漏洞的抽象:任何 session 状态(例如,包范围的变量,它们是 session 范围的)在连接的使用之间都被保留。由于这是一个关于在不访问数据库的情况下确定连接的已用状态与新状态的问题,答案是使用 ODP.NET 的内置连接池根本无法完成此操作。
剩下两个选择:
- 创建一个连接池实现,该实现可以提供该信息或在创建每个新连接时执行用户定义的初始化;或
- 执行数据库往返以确定连接的已使用状态和新状态。
关于c# - ODP.NET连接池: How to tell if a connection has been used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7845559/