我在一个有很多字段的类上调用一个简单的XmlSerializer.Deserizlize()时遇到了巨大的性能损失.
注意:我在家里没有Visual Studio编写代码,因此可能会有一些错误.
我的可序列化类是扁平的,有数百个字段:
[Serializable]
class Foo
{
public Foo() { }
[XmlElement(ElementName = "Field1")]
public string Field1;
// [...] 500 Fields defined in the same way
[XmlElement(ElementName = "Field500")]
public string Field500;
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序反序列化输入字符串(甚至很小):
StringReader sr = new StringReader(@"<Foo><Field1>foo</Field1></Foo>");
XmlSerializer serializer = new XmlSerializer(typeof(Foo));
object o = serializer.Deserialize(sr);
Run Code Online (Sandbox Code Playgroud)
运行在32位系统中的应用(或32位被迫corflags.exe),代码需要大约一秒钟的第一次(临时序列化类的生成,和所有的...),那么它的接近0.
在64位系统中运行应用程序,代码第一次占用一分钟,然后接近0.
在第一次执行XmlSerializer期间,对于大型类,在64位系统中,可能会将系统挂起这么长时间?
现在我不确定是否必须责怪临时类生成/删除,xml名称表初始化,CAS,Windows搜索,AntiVirus或圣诞老人......
破坏者
以下是我的测试,如果您不想被我(可能的)analysys错误所牵制,请不要阅读此内容.
为了进一步解释最后一点,如果我有一个班级:
[Serializable]
class Bar
{ …Run Code Online (Sandbox Code Playgroud)