У меня есть служба WCF, которая выполняет поиск и возвращает список достаточно сложных объектов клиенту. Это система EAV, поэтому каждый возвращаемый объект имеет список прикрепленных значений, размер которых зависит от размера объекта.Медленная сериализация ответа WCF с использованием DataContractSerializer
В моем тестовом поиске я подтвердил посредством регистрации, что фактический поиск занимает менее секунды, чтобы завершить почти в каждом случае. Последнее, что я делаю перед возвратом ответа клиенту, - это регистрация, завершившая обработку.
К сожалению, клиент не получает ответ до 15-20 секунд после того, как я закончил с ним. Общий размер ответа составляет около 250 кб, поэтому он довольно маленький. Это передается по локальной сети в течение минуты, и я попытался отключить брандмауэр и антивирус, чтобы убедиться, что ни один из них не вмешивается.
Я заметил, однако, что если ответ был значительно меньше, например, удалив поля, прикрепленные к каждому объекту, ответ был намного быстрее. Я также попытался пройти через локально размещенную (IIS) копию службы, и после прохождения окончательного заявления return
все еще потребовалось еще 15 секунд, чтобы добраться до локального клиентского приложения.
Я использую basicHttpBinding, поскольку служба будет потребляться как .Net, так и PHP-клиентами.
Теперь, может ли кто-нибудь предложить способ, я могу подтвердить, что это действительно так? И как я могу исправить вредоносное медленное время сериализации?
Edit:
Чтобы уточнить, я пометил каждый класс с [DataContract] атрибута и каждого свойства с [DataMember] - WCF обрабатывает сериализацию, когда я вернуть данные. В этом случае это список типа Entity (пользовательский класс, который содержит список значений
Edit 2:.
Я проверил скорость DataContractSerializer и она занимает около 15 секунд, чтобы написать список из 65 возвращенных объектов в простой поток памяти. Это кажется смешным, и я не уверен, что изменилось, чтобы сделать его настолько болезненно медленным.
Какой код вы используете для сериализации? Вы использовали Fiddler, чтобы увидеть, когда приходит первый байт. Какой класс вы сериализуете? Вы сериализуете список объектов? – Aron
Отредактировал вопрос, чтобы включить информацию, которую вы просили. – Maloric
Ой, и я не пробовал Fiddler - посмотрим, что сейчас. – Maloric