现有一个SqlParameter param1 = new SqlParameter();
如果要获取第二个SqlParameter,请问下面2种实现方法,哪个在性能方面表现会好一点,以及比较的依据。方法一:
SqlParameter param2 = new SqlParameter();方法二:
SqlParameter param3 = (SqlParameter)((ICloneable)param1).Clone();
会有这个想法,是因为在一个项目中用了很多的存储过程,对SqlParameter类型对象的实例化比较频繁,所以想从中选择一种性能较好的写法。
如果要获取第二个SqlParameter,请问下面2种实现方法,哪个在性能方面表现会好一点,以及比较的依据。方法一:
SqlParameter param2 = new SqlParameter();方法二:
SqlParameter param3 = (SqlParameter)((ICloneable)param1).Clone();
会有这个想法,是因为在一个项目中用了很多的存储过程,对SqlParameter类型对象的实例化比较频繁,所以想从中选择一种性能较好的写法。
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 说的都有道理。
不以其他作为依据也该是第一个好吧
但实际应用中还是像2楼这样做比较实际