当前位置:  开发笔记 > 编程语言 > 正文

如何安全有效地缓存ADO.NET命令?

如何解决《如何安全有效地缓存ADO.NET命令?》经验,为你挑选了2个好方法。

我想使用这种模式:

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;

显然,我不想遇到奇怪的问题,比如人A从缓存中检索这个问题,更新param1,人2从缓存中获取它,并更新param2和运行命令的每个用户混合使用两者.

克隆从缓存中取出的命令可能比从头开始创建新命令更昂贵.

ASP.NET缓存的线程安全性如何?我错过了任何其他潜在的陷阱吗?尽管存在线程问题,这种技术是否适用于无参数命令?

Clarefication:如果我想用脚比喻自己,我该如何瞄准?有没有办法锁定对缓存中对象的访问权限,以便访问序列化?



1> Joe..:

很简单:不要.如果你看不出这是错的,你需要阅读更多关于ADO.NET的内容.有很多文献解释了正确的方法:只需在需要时创建连接和命令,并确保正确处理它们.



2> AnthonyWJone..:

缓存本身是线程安全的,但不会对放在其中的对象赋予线程安全性.SqlCommand对象不是线程安全的,因此不是您想要缓存的东西.

在这种情况下最重要的是缓存为您处理的连接,您不应该自己尝试照顾它.

与执行相比,命令对象(即使是具有许多参数的命令对象)的创建仍将是花生.除非您有证据,否则不要尝试缓存它们.

您项目面临的最大风险是过早优化.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有