Будет ли этот код вызывать утечку памяти в моем приложении MVC? - PullRequest
0 голосов
/ 30 сентября 2011
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 - это большой объект, который заполняется в действии контроллера. Будет ли он удален или удален из памяти при удалении контроллера?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Нет смысла в этом поле 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, и поэтому все его поля экземпляра, включаямодель вида.

0 голосов
/ 30 сентября 2011

если метод populateViewModel не использует неиспользуемые ресурсы (как контекст данных) или использует и удаляет их, ваш код должен быть в порядке.

...