看了网上很多有关ActiveRecord的文章,对于SessionScope只是在延迟加载中提及,但是SessionScope实际上是ActiveRecord一个非常重要的特点。善于使用它可以提高应用性能。
看看Castle官方网站是怎么说的。
Session scope allows you to reuse the NHibernate session, thus not flushing it after each database operation. This can dramatically improve the performance on database intense methods.
OK,接下来我们用实际的例子说明。
看看Castle官方网站是怎么说的。
Session scope allows you to reuse the NHibernate session, thus not flushing it after each database operation. This can dramatically improve the performance on database intense methods.
OK,接下来我们用实际的例子说明。
public static void TestSessionScope()
{
User u = new User();
u.Name = "a3";
u.Create();
Console.WriteLine(User.Find("a3").Name);
}
使用SQL事件探查器,我们会发现有两次Connection Reset调用。
接下来,我们使用SessionScope,看看效果。
public static void TestSessionScope()
{
// 使用 SessionScope 能减少 ConnectionReset,提高性能。
using (new SessionScope())
{
User u = new User();
u.Name = "a3";
u.Create();
Console.WriteLine(User.Find("a3").Name);
}
}
只有一次Connection Reset,对于大并发的应用,会是什么样的情形,不言而喻……
抽空看看ActiveRecord的源代码,你会发现ActiveRecordBase的所有相关方法都会检查SessionFactory中是否有可用的SessionScope。