这段代码会导致我的MVC应用程序出现内存泄漏吗?

时间:2011-09-30 07:00:03

标签: asp.net-mvc memory-leaks

public class SomeViewModel
{
    public List<Something> listOfSomethings = new List<Something>();
    public Entity EntityObj;
    etc...
    etc..
    ..
}

public class Controller() 
{
    public SomeViewModel viewModel;

    public ActionResult SomeAction() 
    {
        viewModel = populateViewModel();

        return View(viewModel);
    }
}

SomeViewModel是一个在控制器操作中填充的大对象。当控制器被丢弃时,它是GC还是从内存中清除?

2 个答案:

答案 0 :(得分:2)

控制器中没有public SomeViewModel viewModel;字段。控制器操作是独立的,这意味着如果您首先调用SomeAction为该字段设置值然后调用其他操作,则不希望此字段存活。所以你应该简单地使用它:

public class HomeController: Controller
{
    public ActionResult SomeAction() 
    {
        var viewModel = populateViewModel();
        return View(viewModel);
    }

    public ActionResult SomeOtherAction()
    {
        var viewModel = populateViewModel();
        return View(viewModel);
    }
}

这就是说你当前的代码似乎没有内存泄漏,因为一旦请求结束,Controller类就有资格获得GC,所以它的所有实例字段都包括视图模型。

答案 1 :(得分:0)

如果populateViewModel方法不使用disaposable资源(作为数据上下文)或使用和处理它们,那么您的代码应该没问题。