2

我正在更新我们公司用来调用 Oracle 数据库上的存储过程的数据访问库。该库当前允许调用应用程序使用单个 OracleCommand (IDbCommand) 对象和单个 OracleConnection (IDBConnection) 进行多个调用。这意味着调用者将为调用添加参数,进行调用,清除参数并重复。完成后,消费者应用程序调用 dispose 来清理所有内容。

我可以通过在库中使用“使用”语句来确保在每次调用后清理命令和连接对象来使事情变得更干净,但这意味着上述功能将丢失并且每次调用都会创建一个新的命令/连接. 我发现在我发现的大多数示例中都这样做了,但它们通常只是简单的示例。

我的问题:允许命令和/或连接在调用之间持续存在是否值得?每次重新创建它们是否过于昂贵?

4

3 回答 3

1

这是关于可扩展性的。创建和处理命令的成本很低。保持连接打开是昂贵的部分。如果您有 1000 个活动客户端持有 1000 个打开的连接,那么这就是数据库的负载。我经常持有连接对象,但只是关闭连接。这减轻了数据库的负担,并且在 .NET 中保存连接对象的开销非常小。在典型的最终用户程序中,连接仅在一小部分时间使用,因此在不使用时关闭连接,这 1000 个用户可能只有 10 个活动连接。现在,像数据加载器这样的程序使用连接 1/2 的时间,然后保持连接打开。

于 2012-09-17T18:57:43.350 回答
0

请注意,默认情况下,OracleConnection 对象实际上是一个连接池。因此,您可以让它为您完成实际打开和关闭连接的工作,同时仍然保持良好的性能。您可以使用许多连接字符串属性来控制池的大小和连接的生命周期。

克里斯蒂安·谢伊

甲骨文

于 2014-03-06T02:13:10.563 回答
0

同意布拉姆。连接对象应该使用数据访问类创建,并且每个执行数据库调用的方法都应该打开和关闭它,除非您在方法之间有某种事务控制,但总的来说,对于简单的 CRUD 操作,这是方法我建议你采取

于 2012-09-18T09:04:44.277 回答