我正在做一些更新数据访问库的工作,我们公司用它来调用Oracle数据库上的存储过程。该库当前允许调用应用程序使用单个OracleCommand(IDbCommand)对象和单个OracleConnection(IDBConnection)进行多次调用。这意味着呼叫者将为呼叫添加参数,进行呼叫,清除参数并重复。完成后,消费者应用程序会调用dispose来清理所有内容。
我可以通过在库中使用“using”语句来使事情更清晰,以确保在每次调用后清除命令和连接对象但这意味着上述功能将丢失并且新的命令/连接将是每次通话创建。我发现在我找到的大多数例子中都做到了这一点,但它们通常只是简单的例子。
我的问题:允许命令和/或连接在呼叫之间保持是否值得?每次重新创建它们是否过于昂贵?
答案 0 :(得分:1)
关于可扩展性。创建和处理命令的成本很低。保持连接打开是昂贵的部分。如果有1000个活动客户端持有1000个打开的连接,那么这是数据库上的负载。我经常持有连接对象但只是关闭连接。这会减轻数据库的负担,并且在.NET中保存连接对象的开销很小。在典型的最终用户程序中,连接仅在一小部分时间内使用,因此在不使用时关闭连接,这1000个用户可能只有10个活动连接。现在,像数据加载器这样的程序使用1/2连接,然后打开连接。
答案 1 :(得分:0)
同意Blam。 应该使用数据访问类创建连接对象,并且执行对数据库的调用的每个方法都应该打开和关闭它,除非在方法之间有某种事务控制,但总体而言,对于简单的CRUD操作,这是方法我建议你带
答案 2 :(得分:0)
请注意,默认情况下,OracleConnection对象实际上是一个连接池。因此,您可以让它为您实际打开和关闭连接,同时仍保持良好的性能。您可以使用许多连接字符串属性来控制池的大小和连接的生命周期。
Christian Shay
的Oracle