DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Christian Hehtke Artikel Drucken
        
Speed Up XmlSerialization with sgen.exe

Das Framework 2.0 bietet die Möglichkeit Serialisierungsassemblies im vorraus zu erstellen. Bisher wurden XmlSerializer zur Laufzeit erzeugt. Das ist mitunter sehr langwierig vor allem beim ersten mal. Die angesprochenen Serialisierungsassemblies werden mit sgen.exe erzeugt diese liegt dem .Net Framework 2.0 SDK bei. Serialisierungsassemblies enthalten fertige Serializer für eure Objekte sodass diese direkt instanziert werden können.

Mit folgender Commandline können wir auf einfache Weise ein Serialisierungsassembly erzeugen:
sgen /a:d:\MyProject\MyAssembly.dll

Nun liegt eine DLL im Verzeichnis eurer Anwendung vor die den namen MyAssembly.XmlSerializers.dll tragen sollte. Diese DLL könnt ihr nun referenzieren und die generierten XmlSerializer verwenden. Diese befinden sich im Namespace Microsoft.Xml.Serialization.GeneratedAssembly.

Bringt das ganze überhaupt etwas ? Antwort ist einfach JA. Ich habe den Test sogar ungerecht gestaltet, sodass der zur Laufzeit generierte XmlSerializer leichte Vorteile hatte, und es kamen folgende Zahlen heraus.

Beim ersten Start der Anwendung:

Dauer ohne Serializationassembly: 1491,0719 milliseconds
Dauer mit Serializationassembly: 42,1218 milliseconds

Nachfolgende Starts:

Dauer ohne Serializationassembly: 7,0411 milliseconds
Dauer mit Serializationassembly: 5,7496 milliseconds

Alles in allem finde ich, das dass eine sehr lohnende Sache ist die nicht viel Arbeit macht. Eventuelle weitergehende Performancesteigerung durch ngen.exe habe ich nicht getestet.

Viel Spass mit einer schnelleren XmlSerialisierung.

Mfg Christian

Falls ihr den Test nachvollziehen wollt das Testprogramm:

using System;
using System.Diagnostics;
using System.IO;
using System.Xml.Serialization;
using Microsoft.Xml.Serialization.GeneratedAssembly;

    class Program    
    {
        static void Main(string[] args)
        {
            OrderItem o = new OrderItem();
            o.Id = 1; o.Name = "Wurst";
            o.Price = 1.99; o.Ammount = 1;
            o.Description = "Wurst aus Fleisch";
            Stopwatch st = new Stopwatch();
            StreamWriter sw = new StreamWriter("OrderItem.xml");
            st.Start();
            MySerializers.OrderSerializer.Serialize(sw, o);
            TimeSpan elapsed = st.Elapsed;
            sw.Close(); sw.Dispose();
            st.Stop(); st.Reset();
            Console.WriteLine("Dauer ohne Serializationassembly: {0} milliseconds",
elapsed.TotalMilliseconds.ToString()); sw = new StreamWriter("OrderItem.xml"); st.Start(); // Dieser Serializer wird aus dem generierten assembly instanziert. OrderItemSerializer ois = new OrderItemSerializer(); ois.Serialize(sw, o); elapsed = st.Elapsed; sw.Close(); sw.Dispose(); Console.WriteLine("Dauer mit Serializationassembly: {0} milliseconds",
elapsed.TotalMilliseconds.ToString()); Console.ReadLine(); } } static class MySerializers { private static XmlSerializer _OrderSerializer = new XmlSerializer(typeof(OrderItem)); public static XmlSerializer OrderSerializer { get { return _OrderSerializer; } } } public class OrderItem { private int _Id; [XmlAttribute()] public int Id { get { return _Id; } set { _Id = value; } } private double _price; [XmlElement()] public double Price { get { return _price; } set { _price = value; } } private int _Ammount; [XmlAttribute()] public int Ammount { get { return _Ammount; } set { _Ammount = value; } } private string _Name; [XmlElement()] public string Name { get { return _Name; } set { _Name = value; } } private string _Description; [XmlElement()] public string Description { get { return _Description; } set { _Description = value; } } }

DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 18.04.2006
  Gültig bis: 17.07.2006
1 Ratings
Bewertung: 100,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG