Я работаю над страницей asp.net и пытаюсь уменьшить время ее загрузки. Загрузка 20 записей в виде списка занимает около 8 секунд.
Страница загружалась правильно, несмотря на медленное использование eval следующим образом:
<asp:LinkButton CommandArgument='<%#Eval("EmployeeID")%>' >Edit</asp:LinkButton>
Однако, поскольку предыдущий подход был медленным, я изменил его на следующий, основываясь на информации, которую я прочитал здесь:
<asp:LinkButton CommandArgument='<%# ((DataRowView)Container.DataItem)["ApplicationID"]%>'>Edit</asp:LinkButton>
Однако новый код вызывает следующую ошибку: Невозможно привести объект типа DataObjects.Data.EmployeeInfo к типу 'System.Data.DataRowView
Я не так хорошо знаком со вторым методом, но время загрузки первого метода неприемлемо. на заметку:
в примере кода, который я видел, использовались DataRowView и DataItem. Могу ли я заменить DataRowView или DataItem на что-то другое? Что мне нужно сделать, чтобы исправить эту ошибку?





Сменить <asp:LinkButton CommandArgument='<%# ((DataRowView)Container.DataItem)["ApplicationID"]%>'>Edit</asp:LinkButton>
к
<asp:LinkButton CommandArgument='<%# ((DataObjects.Data.EmployeeInfo)Container.DataItem).ApplicationID %>'>Edit</asp:LinkButton>
Однако вряд ли это существенно улучшит время загрузки. 8 секунд для загрузки 20 записей почти наверняка не имеют отношения к Eval или кастингу. Скорее всего, это укажет на проблему с производительностью в коде хранимой процедуры / базы данных. Вы должны запустить SQL Server Profiler, чтобы получить точное представление о том, сколько времени занимает ваш запрос к базе данных. Если подтверждено, что проблема связана с вашей хранимой процедурой / представлением, вы можете использовать Анализатор запросов SSMS для определения узких мест и того, что вы можете сделать для повышения производительности. Если вы хотите опубликовать результаты анализа запросов, мы сможем вам помочь.
Это очень странно. Это большая страница с большим количеством элементов? Есть ли у вас собственная логика привязки данных?
Нет Мехди, нет нестандартной логики. Я не думаю, что это такая большая страница. Он имеет два списка (родительский и дочерний). Каждый список имеет около 10 полей. Я пробовал то, что ты сказал. На этот раз я получаю сообщение об ошибке: EmployeeInfo не является индексируемым полем.
индексатор? В моем ответе нет проиндексированных свойств. Вы уверены, что использовали ((DataObjects.Data.EmployeeInfo) Container.DataItem) .Applicat ionID?
Вы правы, Мехди, я ошибся при написании строки кода, теперь она работает, но производительность не улучшилась. Вы хоть представляете, почему рендеринг страницы занимает так много времени, если данные возвращаются быстро?
Я был бы более чем счастлив провести с вами некоторое время, если настроил демонстрацию экрана. Трудно сказать, не глядя на код
Спасибо, я собираюсь попробовать это прямо сейчас. проблема с производительностью определенно связана с пользовательским интерфейсом, а не с хранимой процедурой. Я протестировал его, и данные загружаются из базы данных менее чем за секунду. Тогда проблема связана с отображением веб-страницы.