ASP.Net: узкий цикл в уровне представления - PullRequest
0 голосов
/ 16 июня 2009

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

Когда мы перебираем данные на страницах ASPX, это создает жесткий цикл (или замкнутый цикл?), Который потребляет более 95% ЦП.

Как нам избежать скачков ЦП, а также как можно быстрее завершить процесс? ТИА

Ответы [ 3 ]

4 голосов
/ 16 июня 2009
  1. Купить более быстрый сервер
  2. Купить больше серверов
  3. Делай меньше работы

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

Итог: не делайте узкий цикл на уровне представления. Ему там не место.

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

1 голос
/ 16 июня 2009

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

Делаете ли вы такие вещи, как многократные итерации по элементам (т.е. вложенные циклы), когда использование словаря будет работать лучше? Внимательно посмотрите на то, что вы делаете, и подумайте, сколько раз на самом деле выполняется каждая строка кода.

Некоторый код, над которым я работал на прошлой неделе, должен был оценить ряд сложных правил безопасности для примерно 500 000 объектов. Выполнение кода завершения заняло около 3,5 минут - 2 минуты для загрузки из БД, 10 секунд для обработки и 1 минута 20 секунд для записи результатов в файл результатов. Если у вас есть все в памяти, если вы убедитесь, что не зацикливаете данные больше, чем нужно, все может быть на удивление быстро.

1 голос
/ 16 июня 2009

Опираясь на № 3 Джона, вам действительно нужно 1000 строк данных? Это звучит как много. Пользователи не оценят необходимость разбираться с этим вручную. Подумайте о том, чтобы предлагать функции подкачки или поиска, которые уменьшают количество, отображаемое на экране одновременно. Если вы уже компилируете это для меньшего количества записей, вы, вероятно, можете сделать это более эффективно в своей базе данных.

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