Linq to SQL DataContext Windsor IoC内存泄漏问题

Mr.*_*ble 4 asp.net-mvc memory-leaks castle-windsor inversion-of-control

我有一个ASP.NET MVC应用程序,它使用Castler Windsor IoC基于每个Web请求创建一个Linq2SQL datacontext.

由于某种原因我不完全理解,每次创建一个新的datacontext(在每个Web请求上)大约8k的内存被占用而不被释放 - 这不可避免地导致OutOfMemory异常.

如果我强制垃圾收集,则释放内存.

我的datacontext类非常简单:

 public class DataContextAccessor : IDataContextAccessor
 {
    private readonly DataContext dataContext;
    public DataContextAccessor(string connectionString)
    {
        dataContext = new DataContext(connectionString);           
    }
    public DataContext DataContext { get { return dataContext; } }
 }
Run Code Online (Sandbox Code Playgroud)

用于实例化的Windsor IoC webconfig如下所示:

 <component id="DataContextAccessor"
             service="DomainModel.Repositories.IDataContextAccessor, DomainModel"
             type="DomainModel.Repositories.DataContextAccessor, DomainModel"
             lifestyle="PerWebRequest">       
    <parameters>
      <connectionString>
        ...
      </connectionString>
    </parameters>
  </component>
Run Code Online (Sandbox Code Playgroud)

有谁知道问题是什么,以及如何解决它?

que*_*en3 6

L2S DataContext实现了IDisposable.您的接口也必须实现它,并调用DataContext.Dispose(),以便Windsor知道有资源要处置.

顺便提一下温莎/ IDisposable问题:http : //www.jeremyskinner.co.uk/2008/05/03/aspnet-mvc-controllers-windsor-and-idisposable/ http://www.nablasoft.com/ Alkampfer/p = 105