Запуск XmlSerializer ОГРОМНАЯ потеря производительности на 64-битных системах

Я действительно испытываю ОГРОМНУЮ потерю производительности при вызове простого XmlSerializer. Включая .cs в мой проект и используя его вместо XmlSerializer, код запускается БЫСТРО даже в 64-битных системах

  • Создание того же класса FooXmlSerializer с sgen.exe, ссылка на сборку Foo.XmlSerializers.dll в моем проекте , и его использование вместо XmlSerializer заставляет код работать МЕДЛЕННО даже в 64-битных системах ( это меня очень беспокоит )
  • Потеря производительности происходит только в том случае, если входные данные для десериализации действительно содержат поле большой класс ( это тоже очень меня беспокоит )
  • Для дальнейшего объяснения последнего пункта, если у меня есть класс:

    [Serializable]
    class Bar
    {
        public Bar() { }
    
        [XmlElement(ElementName = "Foo")]
        public Foo Foo; // my class with 500 fields
    }
    

    Десериализация выполняется медленно только при передаче дочернего элемента Foo. Даже если я уже выполнил десериализацию:

     StringReader sr = new StringReader(@"<Bar></Bar>");
     XmlSerializer serializer = new XmlSerializer(typeof(Bar));
     object o = serializer.Deserialize(sr); // FAST
    
     StringReader sr = new StringReader(@"<Bar><Foo><Field1>foo</Field1></Foo></Bar>");
     XmlSerializer serializer = new XmlSerializer(typeof(Bar));
     object o = serializer.Deserialize(sr); // SLOW
    

    EDIT Я забыл сказать, что я проанализировал выполнение с помощью Process Monitor, и я не вижу, чтобы какая-либо задача занимала много времени из моего приложения или из csc. exe или что-нибудь, связанное с Framework. Система просто выполняет другие функции (или мне что-то не хватает), например, антивирус, explorer.exe, индексация Windows Search (их уже пытались отключить)

    22
    задан Filini 9 November 2010 в 19:25
    поделиться