Как улучшить производительность служб данных WCF

Я новичок в WCF Data Services, поэтому я играю. После некоторых начальных тестов я разочарован производительностью моего сервиса тестовых данных.

Я понимаю, что, поскольку WCF DS основан на HTTP, протоколу присущи дополнительные издержки, но мои тесты все еще намного медленнее, чем я ожидал:

Среда:

Все на одной коробке: четырехъядерный 64-битный ноутбук с 4 ГБ оперативной памяти под управлением W7. Достойная машина.Небольшая база данных SQL (SQLExpress 2008 R2) с 16 таблицами ... тестируемая таблица имеет 243 строки.Размещал мой тестовый сервис в IIS со всеми настройками по умолчанию.

Код:

Я создал модель Entity Framework (DataContext) для этой базы данных (стандартный кодовый код VS2010).Я создал сервис данных на основе этой модели.Я создал клиента, у которого есть прямая ссылка на сервис (ObjectContext) для этого сервиса (стандартный кодекс VS2010)В клиенте я также могу напрямую вызывать модель EF, а также использовать собственный SQL (ADO.NET SqlConnection)

План испытаний:

Каждая итерация соединяется с базой данных (есть возможность многократного использования соединений), запрашивает все строки в целевой таблице («СОБЫТИЯ»), а затем подсчитывает их (таким образом, заставляя выполнять любые отложенные выборки).Выполните по 25 итераций для Native SQL (SqlConnection / SqlCommand), Entity Framework (DataContext) и WCF Data Services (ObjectContext).

Результаты:

25 итераций собственного SQL: 436 мс25 итераций Entity Framework: 656 мс25 итераций служб данных WCF: 12110 мс

Уч. Это примерно в 20 раз медленнее, чем EF.

Поскольку WCF Data Services является HTTP, нет возможности для повторного использования HTTP-соединения, поэтому клиент вынужден повторно подключаться к веб-серверу для каждой итерации. Но, конечно, здесь происходит больше, чем это.

Сам EF довольно быстрый, и один и тот же код / ​​модель EF используется повторно как для тестирования сервиса, так и для непосредственного тестирования клиента. Будут некоторые издержки по сериализации и десериализации Xml в службе данных, но это очень много!?! У меня была хорошая производительность с сериализацией Xml в прошлом.

Я собираюсь запустить несколько тестов с кодировками JSON и Protocol-Buffer, чтобы посмотреть, смогу ли я получить более высокую производительность, но мне любопытно, есть ли у сообщества какие-либо советы по ускорению этого процесса.

Я не силен в IIS, так что, возможно, есть некоторые настройки IIS (кэши, пулы соединений и т. Д.), Которые можно настроить, чтобы улучшить это?

Ответы на вопрос(8)

Ваш ответ на вопрос