处理C#ADO.Net应用程序中的泄漏

时间:2018-06-07 06:32:21

标签: c# ado.net sqlconnection sqlcommand executenonquery

以下是使用ADO.Net执行查询的简短代码段

using(SqlConnection objSqlConnection  = new SqlConnection(sConnectionString))
    {
    objSqlConnection.Open();

    using (SqlCommand objSqlCommand = new SqlCommand(sSQLQuery, objSqlConnection))
        {
        objSqlCommand.ExecuteNonQuery();
        }
    }

其中' sConnectionString'是一个标准的SQL Server连接字符串和 ' sSQLQuery'是一个基本的INSERT查询

在循环中执行上面的代码(一秒钟一次),我发现了一些非常奇怪的东西。

每次执行都会增加应用程序的句柄数。

我错过了什么吗?

任何想法都将受到高度赞赏。

这里还有其他类似的问题。其中一个答案是将目标框架更改为3.5。但就我而言,这是不可能的 - 我的目标是4.0。

1 个答案:

答案 0 :(得分:0)

在@Freggar和@ Aphelion的帮助下,我对连接字符串进行了一些更改 以下是我用来形成连接字符串的示例代码

SqlConnectionStringBuilder objSqlConnectionStringBuilder = new SqlConnectionStringBuilder();
objSqlConnectionStringBuilder.DataSource                 = sMyDatabaseServer;
objSqlConnectionStringBuilder.IntegratedSecurity         = true;
objSqlConnectionStringBuilder.InitialCatalog             = sMyDatabaseName;
objSqlConnectionStringBuilder.ConnectTimeout             = 30;
objSqlConnectionStringBuilder.Pooling                    = false;


using(SqlConnection objSqlConnection  = new SqlConnection(objSqlConnectionStringBuilder.ConnectionString))
    {
    objSqlConnection.Open();

    using (SqlCommand objSqlCommand = new SqlCommand(sSQLQuery, objSqlConnection))
        {
        objSqlCommand.ExecuteNonQuery();
        }
    }

通过此更改可显着减少手柄泄漏但不完全

希望这有助于某人经历同样的情况