问几个 User.GetUser()的问题。各位高手来帮忙回答一下-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

问几个 User.GetUser()的问题。各位高手来帮忙回答一下

简介:
原文:http://bbs.openlab.net.cn/default.aspx?ForumGroupID=2

Q:

在项目的 AspNetForums.Users类中的这个方法:

public static User GetUser (int userID, string username, bool isOnline, bool isCacheable, bool autoCreateUser ) 

-----------------------------------------------------------

问题一:
如下代码段:


if (HttpRuntime.Cache[cacheKey] == null) HttpRuntime.Cache[cacheKey] = new Hashtable();


这里Cache的用法是直接赋值一个Hashtable,这样这个缓存项的 “依赖项、缓存过期时间 ”等等一些参数的值是什么?即这个缓存项是在何时过期?

-----------------------------------------------------------

问题二:
方法最后代码段:

     // Create a CachedUser struct
     //
     cachedUser.User = user;
     cachedUser.Created = DateTime.Now;

     // Add user to lookup table
     //
     userLookupTable[userKey] = cachedUser;


这里每查看一个未缓存的User就向Cache的Hashtable里插入一个键/值对,也就是缓存了这个User对象,那么当有很多用户资料被一一查看后这个缓存的内容是不是太大了?很耗费内存吧?而且有些用户资料可能在查看一遍后再也不会有人来查看,那么放在这里不是很浪费内存么?

-----------------------------------------------------------

另:

在数据库查询的时候(非存储过程),用Command的Parameters.Add()方法添加参数的时候
在原SQL语句中保留参数位置的语法是什么?我看到有些地方用“WHERE UserName = ? ”而有些地方那个是 “WHERE UserName = @UserName”,或者还有其他的写法?

而我在Add();的时候 parameterName 的值都是 @UserName,到底应该怎么用?

// 希望各位高手能给与解答,谢谢


A:

问题一:

Cache[cacheKey] = object等效于Cache.Insert(cacheKey, object),即等效于:

Cache.Insert(cacheKey, object, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal)

所以,这个缓存项不会过期(NoAbsoluteExpiration)。


问题二:

是会占用内存,这是性能上的取舍问题。(注:User对象并不很大。)


问题三:

两种方法都可以。前者只按参数的顺序进行替换,而后者会按参数变量名进行替换。更具体的细节请查阅ADO.NET的相关资料。


 本文转自浪子博客园博客,原文链接:http://www.cnblogs.com/walkingboy/archive/2005/04/14/137721.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章
最新文章
相关文章