First time here? Check out the site's "greatest hits" or read a post from the archives. Feel free to leave a comment or ask a question, and consider subscribing to the latest posts via RSS or e-mail. Thanks for visiting!
Do you Tweet? Follow me on Twitter @shanselman or learn how to use Twitter!
« Bringing data "along for the ride" with ... | Main | XmlSerializers Part II: Am I Insane? »

Are XmlSerializers ThreadSafe?

Posted 2003-12-04 04:41 PM in Web Services | XmlSerializer.

Here's the deal:

  1. It's expensive to make XmlSerializers (until .NET 2.0 when sgen.exe comes out and I can pre-created and compile Serializers.
  2. I made an XmlSerializer Factory:

    public class XmlSerializerFactory
    {
       private XmlSerializerFactory(){}
       private static Hashtable serializers = new Hashtable();
       public static XmlSerializer GetSerializer(Type t)
       {
          XmlSerializer xs =
    null;
          lock(serializers.SyncRoot)
          {
              xs = serializers[t]
    as XmlSerializer;
              if(xs == null)
              { 
                 xs =
    new XmlSerializer(t);
                 serializers.Add(t,xs);
              }
          }
          return xs;
        }
    }

  3. This Factory is thread safe (right?) BUT Are XmlSerializer instances ThreadSafe?  The MSDN Documentation gives the standard cop-out answer "They aren't explicitly Thread Safe..." (which means they weren't written to be, but also weren't written NOT to be)

So, to make sure I cover the case when someone is deserializing the same type of object using the SAME instance of a deserializer on multiple threads, I've been doing this:

XmlSerializer xs2 = XmlSerializerFactory.GetSerializer(typeof(MyNamedType));
lock(xs2)
{
   mynameInstance = (MyNamedType)xs2.Deserialize(someStringReader);
}

Is the lock{} needed? Am I being paranoid? Mr. Purdy?  Bueller?



Thursday, December 04, 2003 8:08:59 PM (Pacific Standard Time, UTC-08:00)
Only creating the first instance for a particular type is expensive after the first instance there is no overhead.
Friday, December 05, 2003 4:33:50 AM (Pacific Standard Time, UTC-08:00)
Only the guys who wrote XmlSerializer can tell you if it's really needed.
But it's not being paranoid, I would do exactly the same. It won't hurt, unless the heart of your program is about serializing and deserializing objects...
Diego Mijelshon
Comments are closed.

Contact

Sponsors

Hosting By

Hot Topics

Tags

Calendar

<March 2010>
SunMonTueWedThuFriSat
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Archives

March, 2010 (10)
February, 2010 (17)
January, 2010 (13)
December, 2009 (13)
November, 2009 (7)
October, 2009 (19)
September, 2009 (11)
August, 2009 (12)
July, 2009 (21)
June, 2009 (26)
May, 2009 (16)
April, 2009 (13)
March, 2009 (17)
February, 2009 (17)
January, 2009 (18)
December, 2008 (32)
November, 2008 (17)
October, 2008 (22)
September, 2008 (16)
August, 2008 (14)
July, 2008 (25)
June, 2008 (19)
May, 2008 (17)
April, 2008 (17)
March, 2008 (26)
February, 2008 (21)
January, 2008 (28)
December, 2007 (19)
November, 2007 (17)
October, 2007 (31)
September, 2007 (39)
August, 2007 (37)
July, 2007 (43)
June, 2007 (37)
May, 2007 (32)
April, 2007 (38)
March, 2007 (29)
February, 2007 (46)
January, 2007 (31)
December, 2006 (27)
November, 2006 (31)
October, 2006 (32)
September, 2006 (39)
August, 2006 (34)
July, 2006 (40)
June, 2006 (18)
May, 2006 (31)
April, 2006 (34)
March, 2006 (30)
February, 2006 (38)
January, 2006 (44)
December, 2005 (19)
November, 2005 (34)
October, 2005 (24)
September, 2005 (37)
August, 2005 (20)
July, 2005 (24)
June, 2005 (33)
May, 2005 (16)
April, 2005 (22)
March, 2005 (34)
February, 2005 (15)
January, 2005 (37)
December, 2004 (28)
November, 2004 (30)
October, 2004 (34)
September, 2004 (22)
August, 2004 (34)
July, 2004 (18)
June, 2004 (64)
May, 2004 (49)
April, 2004 (21)
March, 2004 (29)
February, 2004 (29)
January, 2004 (36)
December, 2003 (25)
November, 2003 (24)
October, 2003 (59)
September, 2003 (42)
August, 2003 (24)
July, 2003 (44)
June, 2003 (29)
May, 2003 (21)
April, 2003 (30)
March, 2003 (27)
February, 2003 (47)
January, 2003 (50)
December, 2002 (31)
November, 2002 (38)
October, 2002 (44)
September, 2002 (15)
May, 2002 (2)
April, 2002 (4)

Google Ads