[ActiveRecord] 之三:SessionScope

看了网上很多有关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,接下来我们用实际的例子说明。
public static void TestSessionScope()
{
  User u = new User();
  u.Name = "a3";
  u.Create();

  Console.WriteLine(User.Find("a3").Name);
}

使用SQL事件探查器,我们会发现有两次Connection Reset调用。

uploads/200606/02_143150_snap2.gif


接下来,我们使用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);
  }
}

uploads/200606/02_143402_snap3.gif


只有一次Connection Reset,对于大并发的应用,会是什么样的情形,不言而喻……
抽空看看ActiveRecord的源代码,你会发现ActiveRecordBase的所有相关方法都会检查SessionFactory中是否有可用的SessionScope。

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

附:本文所有演示代码使用 2006-01-01 发布的 Castle ActiveRecord Beta3 版本。
Castle ActiveRecord 在发布 1.0 版本前可能有很多较大的变化,如演示代码无法编译,建议您参考最新版本的相关文档。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值