Я работаю над автономным приложением WCF, которое прекрасно работает на моем ПК; однако когда я пытаюсь запустить его на виртуальной машине, размещенной локально с помощью VMware Player, службе требуется около двух минут для возврата данных, тогда как первоначальный запрос занимал всего несколько секунд.
Виртуальная машина использует 2 ГБ ОЗУ и два ЦП под управлением Windows Server 2008 R2 (на 8-ГБ / четырехъядерном хосте под управлением Windows 7).
Глядя на трассировку службы WCF, у меня есть следующие записи журнала (время / описание):
15:41:26.771 From: Processing message 1.
15:41:26.771 Activity boundary.
15:41:26.820 Received a message over a channel.
15:41:26.844 ServiceChannel information.
15:41:26.848 Incoming HTTP request to URI 'http://localhost:8000/Sql/Database' matched operation 'GetDatabase'
15:41:26.944 Message Log Trace
15:43:25.775 To: Execute 'MyProject.ISqlService.GetDatabase'
15:43:25.775 Activity boundary.
15:43:25.947 From: Execute 'MyProject.ISqlService.GetDatabase'
15:43:25.947 Activity boundary.
15:43:25.947 Message Log Trace
15:43:26.134 Throwing an exception.
15:43:26.134 RequestContext aborted
15:43:26.134 Activity boundary.
Таким образом, между получением входящего HTTP-запроса и отправкой реализации сервиса возникает двухминутная задержка. Эта задержка происходит независимо от того, является ли запрос первым (таким образом, влечет за собой обычный штраф за разогрев WCF) или последующим запросом.
Хотя я понимаю, что не собираюсь получать производительность «голого металла» от виртуальной машины, я по-прежнему обеспокоен ужасной производительностью, особенно в связи с тем, что клиент стремится к таймауту до истечения двух минут. Что я могу сделать, чтобы улучшить положение? Это делает тестирование очень трудным.