2011-09-30 4 views
0
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가 처리되거나 컨트롤러가 폐기 될 때 메모리에서 삭제됩니까?이 코드로 인해 MVC 응용 프로그램에서 메모리 누수가 발생합니까?

답변

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

이 존재는 요청이보기를 포함하여 컨트롤러 클래스는 GC를받을 수 종료 등의 모든 인스턴스 필드 때문에 일단 현재의 코드는 메모리 누수를하지 않는 것 말했다 모델.

0

populateViewModel 메서드가 disaposable 리소스 (데이터 컨텍스트)를 사용하지 않거나 사용하고 처리하면 코드가 잘됩니다.

관련 문제