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

发布于 2024-08-23 21:35:04 字数 1460 浏览 2 评论 0原文

注册

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

Given

public class a : IDisposable
{
    public static int counter;

    public a()
    {
        counter++;
    }

    ~a()
    {
        counter--;
    }

    public void Dispose()
    {
    }
}

With registration:

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

Proper stuff in web.config:

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

Using version of Castle built from SVN.
With web page code:

  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() );
       }
   }

I get that ~a() is not called and RedGate profiler shows that a is not
being collected, the reference to it stuck in
AllComponentsReleasePolicy.instance2burden.


I am not the first one to encounter this problem

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三月梨花 2024-08-30 21:35:04

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

We found a similar issue in 2.1, seems to have been fixed along the way, upgrading should fix it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文