开发者

closing connections within a using block

开发者 https://www.devze.com 2023-01-23 03:23 出处:网络
On reading lots of开发者_StackOverflow社区 code, I find that a given Connection object, which implements IDisposable, is is manually closed within a using statement. I see this when I see code related

On reading lots of开发者_StackOverflow社区 code, I find that a given Connection object, which implements IDisposable, is is manually closed within a using statement. I see this when I see code related to MySQL.

It's not needed to be explicitly closed. Why would the developer close it manually?

using(cnn)
{
    //code is here
    cnn.close();
}

Is this a good/helpful measure?


Explicitly closing in a using block is duplication, misleading and redundant so for me, is a bad thing.


It depends on the connection. Many close themselves in the Dispose method. SQLConnection for example closes itself in the Dispose.


It's not needed, as IDbConnection is specified as closing on Dispose().

(Strictly, it's specified as releasing resources on Dispose(), but that amounts to calling close. If some sort of db connection didn't take any resources then it wouldn't have to, but then that wouldn't be an issue anyway).

It can however be useful to call close prior to that, as the sooner connection objects are closed the better, but the using can catch early escape from the block (whether by an exception or, e.g. returning early in certain cases).

As a rule, it's good to keep the using blocks nice and tight, which removes the advantage, but there can be exceptions.


I think it's reasonable to suppose that an object implementing IDisposable should clean up its own resources and not require the close. Now it might not close as quickly as you might want, so you would manually close them yourself, but then you wouldn't use the using syntax.

0

精彩评论

暂无评论...
验证码 换一张
取 消