c# - 在使用 block 或使用 block 声明中声明 IDisposable 成员的区别?

标签 c# dispose using-statement

我有以下代码:

    using (SqlCommand command = new SqlCommand())
    {

        command.CommandType = System.Data.CommandType.StoredProcedure;
        command.Connection = new SqlConnection();
        command.CommandText = "";

        command.Parameters.Add(new SqlParameter("@ExperienceLevel", 3).Direction = System.Data.ParameterDirection.Input);

        SqlDataReader dataReader = command.ExecuteReader();
   }

声明 SqlConnection 是否有任何功能影响,我目前正在声明它而不是这样?:

using (SqlCommand command = new SqlCommand())
using (SqlConnection connection = new SqlConnection())

谢谢

最佳答案

是的,有区别。处置 SqlCommand 不会自动处置与其关联的 SqlConnection。您可能会以这种方式泄漏连接,并且会干扰 ADO.NET 连接池;如果您在这段代码运行时查看数据库服务器的事件,您会看到新的连接正在打开而不是关闭。

您应该始终使用第二个版本。事实上,SqlConnection 对象是您真正需要 Dispose 的对象。您应该始终尽快处置任何 实现IDisposable 的东西,但未能处置SqlConnection 尤其危险。

关于c# - 在使用 block 或使用 block 声明中声明 IDisposable 成员的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511492/

相关文章:

c# - (.net) CriticalFinalizerObject - 它的真正作用是什么?

c# - 何时使用 Dispose 或何时使用 Using

flutter - 当小部件从窗口中删除时,不会调用 Dispose - Flutter

garbage-collection - 在 GC 语言中是否有关于(或更好地使用)RAII 的研究?

c# - JavaScript显示隐藏功能布局问题firefox chrome

javascript - Phantom JS单击按钮-等待页面完全加载

c# - WebBrowser Windows Phone 8 的自动高度

c# - var di = new DirectoryInfo(path) 抛出异常,直到我第一次使用 Windows 资源管理器打开路径

C#,奇怪的优化

c# - 使用 & try/catch 嵌套