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还是从内存中清除?
答案 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资源(作为数据上下文)或使用和处理它们,那么您的代码应该没问题。