WCF сериализация медленная при первом вызове - PullRequest
2 голосов
/ 26 декабря 2011

Я использую .Net 3.5 SP1, работаю с сериализатором WCF по умолчанию - DataContractSerializer. У меня есть такой простой интерфейс:

[ServiceContract]
public interface IService
{
    [OperationContract]
    void RecieveInteger(int value);

    [OperationContract]
    void RecieveBigDataType(BigDataType value);
}

Мой клиент выполняет следующие действия:

  1. Вызывает RecieveInteger только для разогрева службы.
  2. 10 раз вызывает RecieveBigDataType и измеряет производительность.

Измеряя 10 вызовов метода RecieveBigDataType, я обнаружил, что первый вызов намного медленнее, чем другие. Кажется, что первый раз, когда WCF нужно сериализовать тип BigDataType, происходит очень медленно. Есть идеи, как сделать первый звонок быстрее?

1 Ответ

1 голос
/ 27 декабря 2011

Согласно MSDN, для XmlSerializer,

Инициализация XmlSerializer путем вызова FromTypes при запуске

Когда XmlSerializer впервые обнаруживает тип, он генерирует код для выполнения сериализации и затем кэширует этот код для последующего использования. Однако если вы вызываете статический метод FromTypes для XmlSerializer, он заставляет XmlSerializer немедленно генерировать и кэшировать необходимый код для типов, которые вы планируете сериализовать. Это уменьшает время, необходимое для сериализации определенного типа в первый раз. В следующем примере показан этот подход.

static void OnApplicationStart()
{
  Type[] myTypes = new Type[] { Type.GetType("customer"), Type.GetType("order") };
  XmlSerializer.FromTypes( myTypes );
}

Я знаю, что вы используете WCF, который использует DataContractSerializer, но, возможно, есть какой-то способ сделать то же самое.

Отсюда: http://msdn.microsoft.com/en-us/library/ff650685.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...