2

可能重复:
关闭并处理 - 调用哪个?

我的数据层中的许多功能不受try-catchorusing子句的保护。

我的 GUI 层有try-catch子句。这够了吗?

dbConnection如果引发异常,我可以依赖被处置和关闭的对象和其他对象吗?GUI 层将处理异常。

4

3 回答 3

8

这够了吗?

没有。除了 via 之外,没有任何东西是自动处理的using。超出范围时不会收集对象 - 垃圾收集会在以后发生,间歇性,并且是不确定的。

如果您正在创建连接,请使用using除非那是不可能的(例如异步回调)。否则,您很容易最终会留下大量打开的连接对象,从而使服务器饱和。

于 2012-08-20T07:41:31.547 回答
0

如前所述,垃圾收集与超出范围的变量无关。就 DbConnection 的 close 和 dispose 而言,如果调用 Dispose,则在 SqlConnection 的情况下,如果关闭连接然后将其释放。尽管还有其他提供者需要我们明确关闭然后处置。例如,在 ODP.Net 的 OracleConnection 中配置,不关闭连接。

您需要了解 DbConnection 是一个抽象类,当涉及到实际行为时,它完全取决于具体类。

于 2012-08-20T07:55:14.827 回答
0

也许可以做到这一点,但这并不意味着这是一个好主意。

一般来说,我肯定会在处理 DB-Connection 的逻辑周围使用一个try-catch-finally子句(或)。using由于您所询问的原因,这不仅会更安全,而且事情处理得当也会更清楚,如果您以后决定更改 GUI 层中的某些内容,则更难意外搞砸.

您应该在尽可能靠近您需要的地方处理这种类型的逻辑(以及实例的创建和处置)。

注意:一个Finally子句可以让您确保连接已关闭,但如果您需要的话,仍然让任何异常“冒泡”到顶部。

于 2012-08-20T07:50:40.057 回答