我是SubSonic和Linq Stuff的新手,我正在尝试找出检索单个记录的最短和最佳方式。
还有哪种方法更快,并且需要更少的代码才能获得单个记录?
User user2 = DB.Select().From(User.Schema)
.Where(User.PasswordColumn).IsEqualTo(password)
.And(User.SINumberColumn).IsEqualTo(siNumber)
.ExecuteSingle<User>();
我已经习惯使用AntsProfiler工具进行检查,这需要平均29.12ms的CPU时间 - 经过十次运行测试
这需要更长的时间
UserController uc = new UserController();
Query query = new Query("User");
query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);
User user = uc.FetchByQuery(query).First<User>();
最后一行需要256.08ms CPU时间加上UserController需要66.86ms。
有什么建议吗?
答案 0 :(得分:2)
“瓶颈”将是生成的查询执行,而不是SubSonic生成它或返回结果。如果特定查询很慢,您应该考虑使用数据库提供程序的索引函数来优化它。
在第二种情况下,我假设额外的执行时间是LINQ从集合中返回第一个项目的开销。
所以我的答案是,第一种方法是最好的方法,如果29ms是不可接受的(对于DB的调用,我认为不合理),在你的中添加一些索引DB加速检索。
答案 1 :(得分:1)
query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);
读作:
query = query.WHERE(User.Columns.Password, password);
query = query.WHERE(User.Columns.SINumber, siNumber);
测试中增加的时间可能因此而被考虑(您要求所有用户项目,然后抓住第一个)。
答案 2 :(得分:0)
我认为约翰对这笔钱是正确的。如果你真的想测试SubSonic,看看需要花多少时间来测试创建SQL语句亚音速所需的时间,而不是SubSonic创建SQL语句需要多长时间以及数据库返回结果需要多长时间同时(你需要隔离你的测试)。
也许您应该测试使用常规旧SQLCommand获取结果所需的时间,并将连接和参数传递给它,并查看需要多长时间才能进行比较。