我有一堆类型的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)...
}
我希望在应用程序启动时初始化它们,而不是在运行时创建它们 这些是Serializer类的一部分,我不确定这是一个好方法吗?有没有更好的方法来进行这种初始化,是否还有其他相关成本?
我是否正确假设这个初始化成本只使用static关键字?
进行一次编辑:该项目是适用于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;
}
}
}
}
需要测试此线程的安全性。
答案 0 :(得分:1)
您可以实现单例模式
答案 1 :(得分:0)
答案是肯定的,如果这些XmlSerializer
变量不是静态的,那么每当你启动你的课程class Serializer
时,它们都会被初始化为该课程。
当它们是静态的时,它们不一定会在应用程序启动时初始化,它们只会在第一次调用class Serializer
中的任何静态或非静态成员(函数或变量)时初始化一次
如果在整个应用程序过程中只有一个class Serializer
实例,那么如果将它们设置为static
或非静态,则没有任何实际区别。
修改强>
根据您的情况,您可能对此感兴趣:
答案 2 :(得分:0)
使它们成为静态将在代码中第一次使用类时创建实例。执行此操作的唯一额外开销是在运行应用程序的整个时间内使用内存。只有这个类的几个实例,性能的提高将大大超过这个小的内存使用量。
此外,您可以在编译时生成序列化程序集。在您的c#项目中,转到属性,然后转到构建标签。靠近底部的是生成序列化程序集选项。这将使用sgen.exe工具预编译XmlSerializer
程序集。如果没有在编译时完成,那就是在运行时完成的事情。