Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关闭使用块中的连接_C#_Coding Style_Idisposable - Fatal编程技术网

C# 关闭使用块中的连接

C# 关闭使用块中的连接,c#,coding-style,idisposable,C#,Coding Style,Idisposable,在阅读大量代码时,我发现实现IDisposable的给定连接对象在语句中被手动关闭。当我看到与MySQL相关的代码时,我看到了这一点 它不需要显式关闭。为什么开发人员要手动关闭它 using(cnn) { //code is here cnn.close(); } 这是一个好的/有用的措施吗?这取决于连接。许多人在Dispose方法中关闭自己。例如,SQLConnection在Dispose中关闭自身。这取决于连接。许多人在Dispose方法中关闭自己。例如,SQLConnec

在阅读大量代码时,我发现实现
IDisposable
的给定
连接
对象在
语句中被手动关闭。当我看到与MySQL相关的代码时,我看到了这一点

它不需要显式关闭。为什么开发人员要手动关闭它

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

这是一个好的/有用的措施吗?

这取决于连接。许多人在Dispose方法中关闭自己。例如,SQLConnection在Dispose中关闭自身。

这取决于连接。许多人在Dispose方法中关闭自己。例如,SQLConnection在Dispose中自动关闭。

使用
块在
中显式关闭是重复、误导和冗余的,因此对我来说是坏事。

使用
块在
中显式关闭是重复、误导和冗余的对我来说也是如此,是一件不好的事情。

我认为有理由假设实现
IDisposable
的对象应该清理自己的资源,而不需要关闭。现在,它可能不会像您希望的那样快速关闭,因此您可以自己手动关闭它们,但是您不会使用
使用
语法。

我认为合理的假设是,实现
IDisposable
的对象应该清理自己的资源,而不需要关闭。现在,它可能不会像您希望的那样快速关闭,因此您可以自己手动关闭它们,但这样您就不会使用
使用
语法了。

不需要它,因为IDbConnection被指定为在Dispose()时关闭

(严格地说,它被指定为释放Dispose()上的资源,但这等于调用close。如果某种类型的db连接没有占用任何资源,那么它就不必占用任何资源,但无论如何这也不是问题)

但是,在此之前调用close可能会很有用,因为连接对象越早关闭越好,但是使用
可以捕获块的早期转义(无论是通过异常还是在某些情况下,例如提前返回)


一般来说,保持using块的整洁和紧密是很好的,这会消除优点,但也有例外情况。

不需要这样做,因为IDbConnection被指定为在Dispose()时关闭

(严格地说,它被指定为释放Dispose()上的资源,但这等于调用close。如果某种类型的db连接没有占用任何资源,那么它就不必占用任何资源,但无论如何这也不是问题)

但是,在此之前调用close可能会很有用,因为连接对象越早关闭越好,但是使用
可以捕获块的早期转义(无论是通过异常还是在某些情况下,例如提前返回)


通常情况下,保持使用块的整洁和紧凑是很好的,这会消除优点,但也可能会有例外。

请下次使用“代码”按钮将代码标记为代码,这样可以提高可读性。下次请使用“代码”按钮将代码标记为代码,它提高了可读性。从使用块内部关闭连接,基本上会将其“降级”为试用的简写。。。最后,从using块内部关闭连接,基本上会将其“降级”为try的简写。。。最后,如果您需要执行多个选择和插入,中间有大量的业务逻辑,该怎么办?我不会做任何不同的事情。为什么会有所不同?在“any”using block中,无论对象是什么,我都不会调用Dispose()。正如我所说,不能保证在dispose中调用Close。尤其是在任何第三方图书馆。如果我在它周围写一个包装,我肯定会在处理之前给close打电话。另外,如果你不把评论发给我,我可能看不到。@Yuriy你为什么要打电话给close。这是关于MySql IDBConnection实现的,在调用dispose时会为您调用close。您可能建议您关闭连接,做一些工作,然后重新打开连接。@Bronumski问题的“MySql”部分在后面进行了编辑。我并不反对在处理SqlConnection时调用close。我建议关闭并重新打开连接。我只是不喜欢Alio所说的不应该在使用非歧视性的内部调用。如果您需要在中间使用繁重的业务逻辑进行多个选择和插入,该怎么办?我不会做任何不同的事情。为什么会有所不同?在“any”using block中,无论对象是什么,我都不会调用Dispose()。正如我所说,不能保证在dispose中调用Close。尤其是在任何第三方图书馆。如果我在它周围写一个包装,我肯定会在处理之前给close打电话。另外,如果你不把评论发给我,我可能看不到。@Yuriy你为什么要打电话给close。这是关于MySql IDBConnection实现的,在调用dispose时会为您调用close。您可能建议您关闭连接,做一些工作,然后重新打开连接。@Bronumski问题的“MySql”部分在后面进行了编辑。我并不反对在处理SqlConnection时调用close。我建议关闭并重新打开连接。我只是不喜欢Alio所说的不应该在一个使用非歧视性语言的内部调用。