使用PerWebRequest创建的某些对象不会在Web请求结束时进行垃圾回收

时间:2010-03-03 21:27:45

标签: .net garbage-collection castle-windsor perwebrequest

鉴于

public class a : IDisposable
{
    public static int counter;

    public a()
    {
        counter++;
    }

    ~a()
    {
        counter--;
    }

    public void Dispose()
    {
    }
}

注册:

application_container = new WindsorContainer( );
application_container.Register( Component.For<a>( ).ImplementedBy<a>( ).LifeStyle.PerWebRequest );

web.config中的正确内容:

       <add name="PerRequestLifestyle"
type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule,
Castle.MicroKernel"/>

使用从SVN构建的Castle版本。 使用网页代码:

  public partial class _Default : System.Web.UI.Page
   {
       protected void Page_Load(object sender, EventArgs e)
       {
           GC.Collect( 2 );
           var a = Global.application_container.Resolve<Global.a>();
           Response.Write( Global.a.counter.ToString() );
       }
   }

我得到了〜a()没有调用,而RedGate分析器显示a不是 被收集,它的参考卡住了 AllComponentsReleasePolicy.instance2burden。


我不是第一个遇到这个问题的人

http://groups.google.com/group/castle-project-users/browse_thread/thread/bd287dd66b3a9d64/f48d740621508c64?lnk=gst&q=PerWebrequest#f48d740621508c64

1 个答案:

答案 0 :(得分:1)

我们在2.1中发现了一个类似的问题,似乎已经修复了,升级应该修复它。