Я использую foreach
в своем представлении, чтобы зациклить мою строго типизированную модель и отобразить таблицу. Всего 25 строк и 7 столбцов - около 280 мсек. Это кажется медленным. Есть ли какой-то трюк с производительностью, который я должен знать для использования циклов в представлениях?
РЕДАКТИРОВАТЬ: Мой контроллер берет данные из таблицы Azure и передает их в представление с использованием шаблона ViewModel. Я не знаю, имеет ли это значение, но мои представления в VB, а мои модели в C #. Итак, они в отдельных проектах. Я придумаю уменьшенный пример, чтобы опубликовать, но сейчас я выбегаю за дверь и вернусь к этому позже этим вечером. Я надеялся, что поймаю толпу StackOverflow до того, как люди уедут домой на выходные, поэтому мой оригинальный пост был написан быстро без примера кода.
РЕДАКТИРОВАТЬ: я подтвердил с Fiddler, что не происходит отложенной загрузки. Во время рендеринга представления нет действий Fiddler.
РЕДАКТИРОВАТЬ: если я передаю представление с данными из таблицы Azure, это занимает 280 мсек. Если я передаю в то же представление поддельные данные, которые выглядят так же, как реальные данные из таблицы Azure, это займет 60 мсек. В любом случае, контроллер просто заполняет объект ViewModel и передает его в представление. Один и тот же класс ViewModel используется в обоих случаях. Я не понимаю.
РЕДАКТИРОВАТЬ: Я думаю, я понял это. Возможно, это было бы очевидно для всех остальных, если бы я сначала включил код. Вот моя ViewModel:
public class EmployeeChildrenViewModel
{
public Employee employee;
public IEnumerable<Child> children;
}
Если я передам вышеупомянутую ViewModel моему View, foreach
займет 280 мсек. Если я сначала заполнил вышеупомянутую ViewModel children.ToList()
, тогда просмотр займет всего 60 мсек. Однако после дальнейшего изучения я вижу, что общее время загрузки страницы одинаково в любом случае. Я думаю, не имеет значения, будет ли IEnumerable повторяться в моем контроллере или в моем представлении, поскольку общий эффект одинаков. Я до сих пор не уверен, что делает итерация по children
, так как я точно знаю, что в тот момент она не попала в базу данных, как подтвердил Fiddler.