提前初始化XMLSerialize以节省运行时成本
本文关键字:运行时 节省 初始化 XMLSerialize | 更新日期: 2023-09-27 17:50:20
我有一堆类型xmlserialize对象:
class Serializer{
static XmlSerializer serializerRequest_EnterVehicle = new XmlSerializer(typeof(Request_EnterVehicle));
static XmlSerializer serializerRequest_Cancel = new XmlSerializer(typeof(Request_Cancel));
static XmlSerializer serializerRequest_PrintInfo = new XmlSerializer(typeof(Request_PrintInfo));
public string ObjToXML(object toSerialize)...
}
我希望在应用程序启动时初始化它们,而不是在运行时创建它们这些都是序列化器类的一部分,我不确定这是一个好方法?是否有更好的方法来做这种初始化,是否有其他与之相关的代价?
我是否正确的假设,这个初始化成本只完成一次使用静态关键字?
编辑:该项目是针对windows mobile 6.1 Pro设备的。net 3.5 Compact Framework项目。
更新:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
namespace SmartDevice_Proxy
{
public sealed class TypedXMLSerializers
{
private static volatile TypedXMLSerializers instance;
private static object syncRoot = new Object();
//Implementation as Singleton
static XmlSerializer serializerRequest_EnterVehicle = new XmlSerializer(typeof(Request_EnterVehicle));
static XmlSerializer serializerRequest_Cancel = new XmlSerializer(typeof(Request_Cancel));
static XmlSerializer serializerRequest_PrintInfo = new XmlSerializer(typeof(Request_PrintInfo));
private TypedXMLSerializers() { }
public static TypedXMLSerializers Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new TypedXMLSerializers();
}
}
return instance;
}
}
}
}
需要测试线程安全性。
可以实现单例模式
链接:http://www.yoda.arachsys.com/csharp/singleton.html
将它们设置为静态将在代码中第一次使用该类时创建实例。这样做的唯一额外开销是,在应用程序运行的整个过程中都会使用内存。如果这个类只有几个实例,性能的提高将大大超过这一小块内存的使用。
另外,您可以在编译时生成序列化程序集。在你的c#项目中,选择Properties,然后选择Build选项卡。底部附近是生成序列化程序集选项。这将使用sgen.exe工具预编译您的XmlSerializer
程序集。
MSDN项目设置文档
答案是肯定的,如果这些XmlSerializer
s变量不是静态的,那么每次您将初始化类class Serializer
时,它们将为该类初始化。
当它们是静态的,它们不必在应用程序启动时初始化,它们只会在class Serializer
中的任何静态或非静态成员(函数或变量)第一次被调用时初始化一次。
如果在整个应用程序过程中只有一个class Serializer
实例,那么将它们设置为static
或非静态将没有真正的区别。
根据您的场景,您可能对以下内容感兴趣:
在c#中实现单例