2012-11-19 2 views
1

На моем сайте приложения у меня есть действие контроллера, создающее и генерирующий файл Excel: из списка элементов он записывает каждое поле каждого элемента через цикл. Упрощенный пример (сог у меня есть ~ 30 полей):ASP.NET MVC Производительность после публикации в IIS

String az = ""; 
az = az + "<table border=\"1\">"; 
az = az + "<tr>"; 
az = az + "<th>Field 1</th>"; 
az = az + "<th>Field 2</th>"; 
for (int i = 0; i < items.Count(); i++){ 
    az = az + "<tr>"; 
    az = az + "<td>" + items.ElementAt(i).Field1+ "</td>"; 
    az = az + "<td>" + items.ElementAt(i).Field2+ "</td>"; 
    az = az + "</tr>"; 
} 
az = az + "</table>"; 

Теперь, когда у меня есть несколько строк, никаких проблем. Когда у меня есть большое количество строк, требуется некоторое время генерировать файл. Это не проблема на localhost, но после публикации сайта в IIS он занимает до 7x (время).

Пример:

Загрузка 250 строк: 0,8s на локальном хосте, 4s на IIS

Загрузка 615 строк: 4s на локальном хосте, 21s на IIS

Загрузка 950 строк: 7s на локальном хосте, 38s на IIS

Загрузка 1300 строк: 15s на локальном хосте, 104S на IIS

Кто-нибудь знает, в чем проблема? Нужно ли мне изменять/устанавливать какую-либо переменную на сайте IIS? В случае, если я этого не делаю, есть ли способ оптимизировать работу в IIS?

Спасибо, надеюсь кто-то может мне помочь!

+0

Это не убьет вашу производительность, но вы должны использовать StringBuilder для конкатенации строк так же, как и вы. –

+0

Что вы подразумеваете под «генерированием файла Excel»? Вы автоматизируете Excel и создаете фактический файл XLS или XLSX? Используете ли вы другой инструмент для создания файла? Или вы делаете что-то еще? –

+0

@ Lukas Нет, вы совершенно неправы: действительно, это убивает мое выступление. Теперь он строит строку менее чем за 1 секунду, независимо от количества строк, как на localhost, так и на IIS! Большое спасибо! – Jack88PD

ответ

0

Во-первых, если вы должны создать свой HTML, как это, то по крайней мере использовать строковый построитель

var az = new StringBuilder(); 
az.append("<table border=\"1\">"); 
az.append("<tr>"); 
//etc 
return az.ToString(); 

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

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