Я новичок в 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 (ObjectContext).
Результаты:
- 25 итераций собственного SQL: 436 мс
- 25 итераций Entity Framework: 656 мс
- 25 итераций служб данных WCF: 12110 мс
Ой.Это примерно в 20 раз медленнее, чем EF.
Поскольку WCF Data Services является HTTP, нет возможности для повторного использования HTTP-соединения, поэтому клиент вынужден повторно подключаться к веб-серверу для каждой итерации.Но, конечно, здесь происходит нечто большее.
Сам EF довольно быстрый, и это один и тот же код / модель EF, который повторно используется и для тестирования сервиса, и для непосредственного тестирования клиента в EF.Будут некоторые издержки по сериализации и десериализации Xml в службе данных, но это очень много!?!В прошлом у меня была хорошая производительность с сериализацией Xml.
Я собираюсь запустить несколько тестов с кодировками JSON и Protocol-Buffer, чтобы посмотреть, смогу ли я получить более высокую производительность, но мне любопытно, еслиУ сообщества есть какие-либо советы по ускорению этого процесса.
Я не силен в IIS, поэтому, возможно, есть некоторые настройки IIS (кэши, пулы соединений и т. д.), которые можно настроить для улучшения этого?