2009-11-17 3 views
0

Проблема: у моей компании в настоящее время есть запрос, который занимает примерно 3 секунды для запуска, но создание таблицы для отображения данных занимает примерно 30 секунд до Переберите. Большинство из них просто:ASP.net: репитер против динамического создания таблицы против StringBuilder - вопрос производительности

Dim MainTable as New Table 
Dim TableR as New TableRow 
Dim TableC as New TableCell 
TableCell.Text = "Some data" 
TableRow.Controls.Add(TableC) 
MainTable.Controls.Add(TableR) 

Теперь выполнение этой операции составляет около 30 секунд примерно на 550 записей. Я попытался изменить процесс на использование строк вместо:

Builder.Append("<tr><td>Something</td></tr>") 

Но не было никакого реального улучшения. Мой вопрос заключается в попытке улучшить производительность.

Будет ли ретранслятор на самом деле быстрее?

ответ

2

Вы уверены, что вы знаете, где узкое место? Вы должны измерить фактическое выполнение цикла, время, необходимое для выполнения запроса клиента, и время, которое требуется клиенту для отображения страницы.

Не кажется вероятным, что для 550 итераций понадобится цикл StringBuilder тридцать секунд, если вы не выполняете другую, необычно дорогостоящую операцию в цикле.

Это более вероятно, что падение производительности из-за:

1) Чрезмерное время отправки данных от сервера к браузеру.

2) Клиент занимает много времени, чтобы на самом деле отобразить страницу.

Оба они, как правило, имеют одну и ту же причину - HTML, отправляемый браузером, слишком велик. (Что также может быть причиной, сэкономив массу вещей в ViewState, что раздувает объем данных, которые вы отправляете клиенту.) В любом случае вам нужно сначала выполнить эти измерения, чтобы выяснить, в чем проблема.

+0

Согласен. Нет никакого способа, чтобы потребовалось бы 30 секунд, чтобы пройти через 550 записей. Там определенно больше происходит - я предполагаю, что будут сделаны расчеты с данными, которые, возможно, выполняются неэффективно. – Josh

+0

Я проверю свои расчеты. Внутри цикла есть несколько запросов, и, возможно, есть некоторые проблемы с эффективностью, которые можно позаботиться о них, чтобы уменьшить время. Но являются ли элементы управления с привязкой к данным более быстрыми, чем простые методы StringBuilder? – jlrolin

+0

jlrolin - контроль привязки данных определенно не быстрее, чем простые методы StringBuilder. Ты на правильном пути. –

1

Вы пытались привязать данные к объекту gridview?

+0

Данные сгруппированы по определенному идентификатору, а затем суммируются этими группировками, поэтому gridview не был лучшим вариантом для отображения его таким образом. – jlrolin

+0

Если вы можете отформатировать данные в одну структуру, вы можете использовать gridview для данных и вставлять строку только для суммы (сумм) - чтобы вы могли минимизировать время, потраченное на создание макета HTML ... – Dani

+0

Еще одна сумасшедшая опция - использовать sql-запрос для генерации части структуры html, но я бы этого не сделал .... – Dani

0

Я просто ответил на другой вопрос, когда у пользователя возникли похожие проблемы, пытающиеся привязать записи 2k +. Может быть, есть некоторые указатели там, которые помогут вам улучшить скорость вещей:

Asp.net binding big dataview to DataGrid

Смежные вопросы