现有一个SqlParameter param1 = new SqlParameter();
如果要获取第二个SqlParameter,请问下面2种实现方法,哪个在性能方面表现会好一点,以及比较的依据。方法一:
SqlParameter param2 = new SqlParameter();方法二:
SqlParameter param3 = (SqlParameter)((ICloneable)param1).Clone();
会有这个想法,是因为在一个项目中用了很多的存储过程,对SqlParameter类型对象的实例化比较频繁,所以想从中选择一种性能较好的写法。

解决方案 »

  1.   

    觉得对性能的影响比较小.如果参数比较多.可以封装一个Parameters对象,需要参数时,向里面add就行了.最后再传给SqlCommand.
      

  2.   

    我感觉应该自己重写Clone方法,实现自定义的浅表克隆。 之后使用第二种方法
      

  3.   

    谢谢上面的兄弟,我在  .Net Reflector里面查看SqlParameter类的代码,它对于克隆的实现是这样的 :// SqlParameter 继承了ICloneable接口 
    public sealed class SqlParameter : MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable
    {
      // 对于克隆接口方法的继承是通过下面的代码实现
        object ICloneable.Clone()
        {
            // 此处调用了构造函数
            SqlParameter parameter = new SqlParameter();
            parameter.SetProperties(this._name, this._sourceColumn, this._version, this._precision, this._scale, this._size, this._forceSize, this._offset, this._direction, this._value, this.SqlDbType, this._suppress, this._inferType);
            return parameter;
        }}
        通过上面的代码可以看到,克隆获取对象的过程中已经包含了SqlParameter parameter = new SqlParameter();
    构造函数的调用,所以使用克隆方法在性能表现上至少不会好于调用构造函数。
        现在有点不明白的是,看到有些程序(如PetShop和Community Server)使用到HashTable缓存SqlParameter,使用的时候再通过克隆获取SqlParameter对象。请问各位这种写法是基于什么目的,或者相比有什么可借鉴的地方?    shinaterry 和kkeemmgg 说的都有道理。
      

  4.   

    个人理解...利用HashTable保存SqlParameter, 再通过Clone得到新的SqlParameter...目的是为了保留基准...因为在新一轮的操作当中, 可能会对新的SqlParameter对象做出局部的修改(并且不影响原来的设置)...而这些修改动作不是经常的......
      

  5.   

    Clone()它还是通过new SqlParameter()后实现
    不以其他作为依据也该是第一个好吧
    但实际应用中还是像2楼这样做比较实际