最近在看Microsoft的PetShop,在SQLServerDAL项目中有一个类SQLHelper.cs,其中定义了一个变量:
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());(方式一)
此变量用来缓存SQL中的参数,但我不知道上面的方式和下面的方式
private static Hashtable parmCache = new Hashtable();(方式二)
有什么不同.
下面是向缓存中加入新内容的方法:
public static void CacheParameters(string cacheKey, params SqlParameter[] cmdParms) {
parmCache[cacheKey] = cmdParms;
}
下面是从缓存中取内容的方法:
public static SqlParameter[] GetCachedParameters(string cacheKey) {
SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
if (cachedParms == null)
return null;
SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
         for (int i = 0, j = cachedParms.Length; i < j; i++) {
         clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
         return clonedParms;
}
我特别想知道如果用(方式二)的话,会出现什么错误!如果不会出错的话,多余的加锁会降低性能.可我也做了些多线程的测试,也没有出现什么错误或异常.希望得到高手的指点!