Scott Hanselman
Posts: 1031
Nickname: glucopilot
Registered: Aug, 2003
|
Scott Hanselman is the Chief Architect at Corillian Corporation and the Microsoft RD for Oregon.
|
|
|
|
Are XmlSerializers ThreadSafe?
|
Posted: Dec 4, 2003 5:39 PM
|
|
|
This post originated from an RSS feed registered with .NET Buzz
by Scott Hanselman.
|
Original Post: Are XmlSerializers ThreadSafe?
Feed Title: Scott Hanselman's ComputerZen.com
Feed URL: http://radio-weblogs.com/0106747/rss.xml
Feed Description: Scott Hanselman's ComputerZen.com is a .NET/WebServices/XML Weblog. I offer details of obscurities (internals of ASP.NET, WebServices, XML, etc) and best practices from real world scenarios.
|
Latest .NET Buzz Posts
Latest .NET Buzz Posts by Scott Hanselman
Latest Posts From Scott Hanselman's ComputerZen.com
|
|
Here's the deal:
-
It's expensive to make XmlSerializers (until .NET 2.0 when sgen.exe comes out and
I can pre-created and compile Serializers.
-
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;
}
}>
-
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?
Read: Are XmlSerializers ThreadSafe?
|
|