Mat*_*tin 2 .net c# vb.net asp.net ado.net
我想使用这种模式:
SqlCommand com = new SqlCommand(sql, con);
com.CommandType = CommandType.StoredProcedure;//um
com.CommandTimeout = 120;
//com.Connection = con; //EDIT: per suggestions below
SqlParameter par;
par = new SqlParameter("@id", SqlDbType.Int);
par.Direction = ParameterDirection.Input;
com.Parameters.Add(par);
HttpContext.Current.Cache["mycommand"] = com;
Run Code Online (Sandbox Code Playgroud)
显然,我不想遇到奇怪的问题,比如人A从缓存中检索这个问题,更新param1,人2从缓存中获取它,并更新param2和运行命令的每个用户混合使用两者.
克隆从缓存中取出的命令可能比从头开始创建新命令更昂贵.
ASP.NET缓存的线程安全性如何?我错过了任何其他潜在的陷阱吗?尽管存在线程问题,这种技术是否适用于无参数命令?
Clarefication:如果我想用脚比喻自己,我该如何瞄准?有没有办法锁定对缓存中对象的访问权限,以便访问序列化?
缓存本身是线程安全的,但不会对放在其中的对象赋予线程安全性.SqlCommand对象不是线程安全的,因此不是您想要缓存的东西.
在这种情况下最重要的是缓存为您处理的连接,您不应该自己尝试照顾它.
与执行相比,命令对象(即使是具有许多参数的命令对象)的创建仍将是花生.除非您有证据,否则不要尝试缓存它们.
您项目面临的最大风险是过早优化.
| 归档时间: |
|
| 查看次数: |
2010 次 |
| 最近记录: |