Можно ли передавать большой объем данных из контроллера для просмотра с помощью viewmodel в MVC3? - PullRequest
6 голосов
/ 26 мая 2011

У меня есть код, который передает почти 1 МБ данных из моего контроллера в представление через модель представления каждый раз, когда вызывается новая страница. Я мог бы немного оптимизировать это, но мне интересно, стоит ли это делать, поскольку весь поток данных является внутренним.

Типичным для того, что я делаю в контроллере, является то, что я получаю все результаты тестирования из хранилища данных Azure, а затем помещаю их в новый экземпляр класса. Затем я передаю этот класс и другие на представление. Я думаю, я не уверен. Будут ли данные передаваться по ссылке или фактические данные будут перемещаться из одного места в другое?

У кого-нибудь есть опыт в настройке производительности для MVC3?

Вот выдуманный пример. В этом примере легко и просто передать класс и содержимое «TestData» в представление, но тогда мне просто нужна пара элементов из этого класса. Поэтому мне интересно, стоит ли мне добавлять логику в контроллер и добавлять поля в модель представления для этих элементов или просто не беспокоиться и не перемещаться по всем данным класса, включая данные, которые мне не нужны.

public class testIndexViewModel
{
    public string   Url { get; set; }
    public PageMeta PageMeta { get; set; }
    public TestData TestData { get; set; }
}

Спасибо,

Ответы [ 3 ]

1 голос
/ 26 мая 2011

Созданный вами класс ViewModel добавляется к ViewDataDictionary, к которому ваш скомпилированный пользовательский класс View получает доступ через свой базовый класс System.Web.Mvc.ViewPage<ViewModelType>. Все это означает, что я уверен, что ваш ViewModel - после его создания - всегда доступен по ссылке, а не копируется по всему месту.

Единственная проблема с производительностью, с которой вы могли столкнуться (я полагаю), связана с созданием объекта размером 1 МБ; сколько таких объектов вы, скорее всего, будете создавать и как часто?

Лично я бы не стал беспокоиться об оптимизации производительности без предварительного нагрузочного тестирования и не заметил бы, что это действительно вызывает проблемы. Если это так, и вашему приложению действительно требуется только часть данных за раз, вы можете выполнить оптимизацию.

Наконец, если в вашем представлении есть код для просеивания 1 МБ данных и выбора секций, которые вы хотите отобразить, вы можете пропустить только просмотр необходимых данных, чтобы сделать код более читабельным, а лучше разделить обязанности Контролера и View.

http://en.wikipedia.org/wiki/Premature_optimization#When_to_optimize

1 голос
/ 26 мая 2011

Я бы посмотрел на это с точки зрения пользователя.

Сколько данных будет отображаться на экране в любое время?

Если их слишком много, существует риск, что данные будутстановится бессмысленным, так как пользователь будет страдать от информационной перегрузки.

Я бы попробовал использовать систему фильтрации некоторого описания, возможно, выпадающие списки для пользователя, чтобы указать в качестве определенного набора фильтров.Таким образом, в вашем контроллере вы можете отфильтровать данные так, чтобы вы возвращали только небольшое подмножество набора данных в 1 МБ.

В качестве альтернативы, если вы хотите вернуть все данные, я бы предложил более стиль ajax, где тольковозвращается небольшое подмножество, и по мере прокрутки пользователь загружает больше данных через ajax - аналогично тому, как работают изображения Google.

0 голосов
/ 26 мая 2011

Не будет никакой разницы, если вы загрузите данные размером 1 МБ, а затем извлечете конкретные данные в новую модель и передадите их в представление. Вы будете использовать тот же объем памяти. Пока вы не привязаны к этому огромному шарику в представлении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...