Нам действительно нужен взгляд эксперта на IIS7, и я сделаю все возможное, чтобы описать нашу проблему. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, и я ее получу.
У нас есть веб-сайт ASP.NET, который ссылается на пару DLL-библиотек .NET, и производительность была впечатляющей для наших клиентов! На нашем собственном тестовом сервере тот же набор данных занял 25 секунд (все еще не быстро, но это другая проблема), а у наших клиентов это заняло 6 минут!
Я писал логи в каждой возможной рутине, о которой я мог думать, записывая, сколько времени это заняло. Он показал, что во всех подпрограммах во всех DLL обработка кода просто занимает больше времени у наших клиентов.
Для дальнейшего тестирования я создал настольное приложение, которое ссылается на те же самые DLL, и запустил его на клиенте. Эти 6 минут опустились до ... 5 секунд !!! Что за ...?
Мы просмотрели все настройки в IIS7 и сравнили его с нашим IIS7 и ... Мы действительно тупы, чтобы честно признать. Характеристики серверов у клиента даже выше, чем у нас!
Давайте увеличим проблему. Мы говорим, например, о функции, которая создает объект и устанавливает 3 свойства. Никаких подключений к БД, вообще ничего сложного, просто:
'Creates a GeneralPractitioner
Public Shared Function Create(ByVal gp As GeneralPractitionerTO) As GeneralPractitioner
'HACK Temporarily write to a logfile.
WebHISPortaalBLL.WriteToLo
g.WriteToLog(Now.ToString("dd-MM-yyyy HH:mm:ss.fff") & " BEGIN WebHISPortaalBLL.GeneralPractitioner.Create", String.Empty, "PerformanceTest")
'Check if parameter is not nothing.
If gp IsNot Nothing Then
'Create new instance of GeneralPractitioner and set properties in object initializer.
Return New GeneralPractitioner With {.ID = gp.ID,
.Name = gp.Name,
.AGBCode = gp.AGBCode}
Else
Return Nothing
End If
End Function
Вызывающая часть кода - это запрос LINQ, поэтому между ними нет ничего. А теперь посмотри на разницу. Сначала я опубликую небольшой фрагмент файла журнала на нашем тестовом сервере, посмотрим на миллисекунды.
Этот метод на нашем тест-сервере:
24-11-2011 15: 23: 34,526 НАЧАТЬ
WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011 15: 23: 34.527
НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011
15: 23: 34.528 НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create
24-11-2011 15: 23: 34.529 НАЧИНАЕТСЯ
WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011 15: 23: 34.530
НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011
15: 23: 34.530 НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create
24-11-2011 15: 23: 34.531 НАЧИНАЕТСЯ
WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011 15: 23: 34.531
НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create
Тот же метод на сервере клиента:
25-11-2011 10: 38: 11,414 НАЧАЛО
WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011 10: 38: 11.476
НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011
10: 38: 11.539 НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create
25-11-2011 10: 38: 11.601 НАЧИНАЕТСЯ
WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011 10: 38: 11.664
НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011
10: 38: 11.726 НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create
25-11-2011 10: 38: 11.789 НАЧАЛО
WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011 10: 38: 11.851
НАЧАТЬ WebHISPortaalBLL.GeneralPractitioner.Create
Там, где нашему тест-серверу требуется в среднем 1 миллисекунда (и обычно 0,5 миллисекунды) для выполнения этой задачи, клиентскому серверу в среднем требуется 62 миллисекунды для выполнения этой задачи!
Почему ??
Есть ли кто-нибудь, кто может нам помочь? Мы будем благодарны за любые комментарии. Все.