【问题标题】:Do I need to Release a Memory of params in C# [duplicate]我是否需要在 C# 中释放参数内存 [重复]
【发布时间】:2014-10-05 07:36:55
【问题描述】:

我使用下面提到的代码将数据插入 SQL,为此我使用了下面提到的代码

 public void ExecuteSQLCommandWithParameters(string command,params object[] Values)
    {
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
        conn.ConnectionString = _connectionString;


        try
        {
            conn.Open();

            System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(command, conn);
            for (int i = 0; i < Values.Length; i++)
            {
                com.Parameters.Add("@"+i.ToString(), Values[i]);
            }

            com.ExecuteNonQuery();
            com.Dispose();
            conn.Close();
            Values = null;


        }
        catch (Exception ex)
        {
            log.Error(string.Format("Error in ExecuteSQLCommand(), command {0}, exception: {1}", command, ex.Message));
        }
    }

上面提到的函数会执行一千次​​trong> 我的问题是需要使NULL params object[] Values 我的意思是我需要写类似的代码

Values=null;

请给我建议

【问题讨论】:

  • 没有。垃圾收集器会为你做这件事。
  • 不过,将该连接粘贴在 using 块中不会有什么坏处!
  • @pwas 垃圾收集不会做这样的事情。垃圾收集将通过将其设置为 null 来完成 OP 希望完成的任务,但 OP 希望完成的任务尚未通过该分配完成。
  • 如果您将对象设置为null,那么您将对象的生命周期延长到该语句。如果你不这样做,它可能会在你的代码没有引用它的地方被垃圾收集。

标签: c#


【解决方案1】:

不,没有必要。对数组的引用(这是Values 包含的)将在堆栈上,因此在方法结束时会自动丢弃。

当垃圾收集器运行并意识到没有人再使用它时,Values 指向的实际数组将被删除。也就是说,当活动对象不再引用它时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多