XmlSerializer.Serialize занимает много времени ... почему? - PullRequest
1 голос
/ 07 декабря 2011

Учитывая следующий код из RssToolkit в RssXmlHelper.cs:

    /// <summary>
    /// Returns XML of the Generic Type.
    /// </summary>
    /// <param name="rssDocument">The RSS document.</param>
    /// <typeparam name="T">RssDocumentBase</typeparam>
    /// <returns>string</returns>
    public static string ToRssXml<T>(T rssDocument) where T : RssDocumentBase
    {
        if (rssDocument == null)
        {
            throw new ArgumentNullException("rssDocument");
        }

        using (StringWriter output = new StringWriter(new StringBuilder(), CultureInfo.InvariantCulture))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            serializer.Serialize(output, rssDocument);
            return output.ToString();
        }
    }

Когда serializer.Serialize () вызывается в моей службе WCF, это занимает много времени.

У меня это сидит в службе WCF, которую я звоню из моего проекта.Я вступаю в это, и, конечно же, это проблема.

Затем я ссылаюсь на проект в своем решении, и никаких проблем.

Есть ли что-то, что я должен делать по-другому при использовании этогов службе WCF?

- ОБНОВЛЕНИЕ -

Хорошо, поэтому я установил Microsoft Windows SDK для Windows 7 и .NET Framework 4, запустил sgne.exe RssToolkit.dll и получите следующую ошибку:

Error:  An attempt was made to load an assembly with in incorrect format [path to rsstoolkit.dll]
- Could not load file or assemply [path to rsstoolkit.dll] or one of its dependencies.  This assembly was build by a runtime newer than the currently loaded runtime and cannot be loaded.

Целевая платформа для моего проекта RssToolkit установлена ​​на 4.0, что соответствует Windows SDK для .Net 4. Разве это не правильно?

1 Ответ

3 голосов
/ 07 декабря 2011

Сериализованные сборки можно создавать с помощью sgen.exe, инструмента XML Serializer Generator Tool, поставляемого с Windows SDK. Я видел радикальные улучшения при использовании его на больших классах.

Он в основном генерирует код, который знает, как сериализовать и десериализовать каждый из объектов, которые есть в вашем домене. После того, как вы сгенерировали DLL, вы можете включить ее в свой проект в качестве ссылки на сборку, а затем использовать внутри нее классы вместо XmlSerializer, который вы используете сейчас.

...