xmlwriter代替deserialize来进行性能优化

来源:互联网 发布:java bigdecimal加法 编辑:程序博客网 时间:2024/05/20 04:26
首先上代码,这边是抽象类里面的基类实现方法:
  public abstract class XmlConfigParser<TResult, TResource> : IConfigParser<TResult, TResource>         where TResource : Resource<TResult>        where TResult:class    {        public virtual TResult Parse(ref TResource resource)        {            Monitor.Watch("begin XmlConfigParse.");            TResult result = null;            XmlSerializer xs = new XmlSerializer(typeof (TResult));            result = xs.Deserialize(resource.Stream) as TResult;            resource.ParseLevel = Enum.ParseLevel.Detail;            resource.Stream.Close();            resource.Stream.Dispose();            resource.Stream = null;            Monitor.Watch("end XmlConfigParse.");            return result;        }        public virtual TResult ParseSchema(ref TResource resource)        {            return resource.Entity;        }

我这边用xmlwrite直接代替,虽然冗余但是速度的确快:

    public class XmlReadQueryConfigParser : XmlQueryConfigParser    {        public override Query Parse(ref QueryResource resource)        {            Query query = new Query();            Monitor.Watch("begin XmlReadQueryConfigParser.");            using (XmlReader xmlReader = XmlReader.Create(resource.Stream))            {                var propertyIndex = 0;                var dataQueryIndex = 0;                while (xmlReader.Read())                {                    switch (xmlReader.NodeType)                    {                        case XmlNodeType.Element:                            if ("Formatter".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                Formatter formatter = new Entity.Formatter()                                {                                    Id = xmlReader.GetAttribute("Id"),                                    Ref = xmlReader.GetAttribute("Ref"),                                    Class = xmlReader.GetAttribute("Class"),                                    CreateType =                                        xmlReader.GetAttribute("Type") == FormatterCreateType.ByClass.ToString()                                            ? FormatterCreateType.ByClass                                            : xmlReader.GetAttribute("Type") ==                                              FormatterCreateType.ByRef.ToString()                                                ? FormatterCreateType.ByRef                                                : FormatterCreateType.NULL                                };                                query.Formatters.Add(formatter);                                propertyIndex++;                            }                            else if (("Property").Equals(xmlReader.Name))                            {                                query.Formatters[propertyIndex - 1].Propertys.Add(new Entity.FormatterProperty                                {                                    Name = xmlReader.GetAttribute("Name"),                                    Value = xmlReader.GetAttribute("Value")                                });                            }                            else if ("DataQuery".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys.Add(new Entity.DataQuery()                                {                                    Id = xmlReader.GetAttribute("Id"),                                    CacheCount = Convert.ToBoolean(xmlReader.GetAttribute("CacheCount")),                                    CacheCountSecond = Convert.ToInt32(xmlReader.GetAttribute("CacheCountSecond")),                                    CountSqlConstructorType = xmlReader.GetAttribute("CountSqlType") == CountSqlConstructorType.Auto.ToString() ?                                        CountSqlConstructorType.Auto : xmlReader.GetAttribute("CountSqlType") == CountSqlConstructorType.Basic.ToString() ?                                        CountSqlConstructorType.Basic : xmlReader.GetAttribute("CountSqlType") == CountSqlConstructorType.Custom.ToString() ?                                        CountSqlConstructorType.Custom : CountSqlConstructorType.NULL                                });                                dataQueryIndex++;                            }                            else if ("Argument".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].Arguments.Add(new Entity.Argument()                                {                                    Name = xmlReader.GetAttribute("Name"),                                    Required = Convert.ToBoolean(xmlReader.GetAttribute("Required")),                                    ValueConvertType = xmlReader.GetAttribute("ValueConvertType") == ValueConvertType.Formatter.ToString() ?                                    ValueConvertType.Formatter : xmlReader.GetAttribute("ValueConvertType") == ValueConvertType.Dictionary.ToString() ?                                    ValueConvertType.Dictionary : ValueConvertType.NULL,                                    ValidationType= xmlReader.GetAttribute("ValueConvertType")==ValidationType.Regex.ToString()?                                    ValidationType.Regex:ValidationType.None                                });                            }                            else if ("Condition".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].Conditions.Add(new Entity.Condition()                                {                                    Field = xmlReader.GetAttribute("Field"),                                    Name = xmlReader.GetAttribute("Name"),                                    Label = xmlReader.GetAttribute("Label"),                                    ConditionType = xmlReader.GetAttribute("ConditionType") == ConditionType.BETWEEN.ToString() ?                                    ConditionType.BETWEEN : xmlReader.GetAttribute("ConditionType") == ConditionType.EQ.ToString() ?                                    ConditionType.EQ : xmlReader.GetAttribute("ConditionType") == ConditionType.GTE.ToString() ?                                    ConditionType.GTE : xmlReader.GetAttribute("ConditionType") == ConditionType.LIKE.ToString() ?                                    ConditionType.LIKE : xmlReader.GetAttribute("ConditionType") == ConditionType.GT.ToString() ?                                    ConditionType.GT : xmlReader.GetAttribute("ConditionType") == ConditionType.IN.ToString() ?                                    ConditionType.IN : xmlReader.GetAttribute("ConditionType") == ConditionType.ISNOTNULL.ToString() ?                                    ConditionType.ISNOTNULL : xmlReader.GetAttribute("ConditionType") == ConditionType.ISNULL.ToString() ?                                    ConditionType.ISNULL : xmlReader.GetAttribute("ConditionType") == ConditionType.LT.ToString() ?                                    ConditionType.LT : xmlReader.GetAttribute("ConditionType") == ConditionType.LTE.ToString() ?                                    ConditionType.LTE : xmlReader.GetAttribute("ConditionType") == ConditionType.NOTIN.ToString() ? ConditionType.NOTIN : ConditionType.NULL,                                    ShowType = xmlReader.GetAttribute("ShowType"),                                    ShowCallBack = xmlReader.GetAttribute("ShowCallBack"),                                    DefaultValue = xmlReader.GetAttribute("DefaultValue"),                                    FieldDataType = xmlReader.GetAttribute("FieldDataType") == FieldDataType.VarChar.ToString() ?                                    FieldDataType.VarChar : xmlReader.GetAttribute("FieldDataType") == FieldDataType.Bit.ToString() ?                                    FieldDataType.Bit : xmlReader.GetAttribute("FieldDataType") == FieldDataType.DateTime.ToString() ?                                    FieldDataType.DateTime : xmlReader.GetAttribute("FieldDataType") == FieldDataType.Decimal.ToString() ?                                    FieldDataType.Decimal : xmlReader.GetAttribute("FieldDataType") == FieldDataType.Int.ToString() ?                                    FieldDataType.Int : xmlReader.GetAttribute("FieldDataType") == FieldDataType.NChar.ToString() ?                                    FieldDataType.NChar : xmlReader.GetAttribute("FieldDataType") == FieldDataType.NVarChar.ToString() ?                                    FieldDataType.NVarChar : xmlReader.GetAttribute("FieldDataType") == FieldDataType.NText.ToString() ?                                    FieldDataType.NText : xmlReader.GetAttribute("FieldDataType") == FieldDataType.Char.ToString() ?                                    FieldDataType.Char : xmlReader.GetAttribute("FieldDataType") == FieldDataType.Text.ToString() ?                                    FieldDataType.Text : xmlReader.GetAttribute("FieldDataType") == FieldDataType.UniqueIdentifier.ToString() ?                                    FieldDataType.UniqueIdentifier : FieldDataType.NULL,                                    DbType = Convert.ToInt32(xmlReader.GetAttribute("DbType")),                                    Size = Convert.ToInt32(xmlReader.GetAttribute("Size")),                                    ValidationType = xmlReader.GetAttribute("ValidationType") == Com.Centaline.Framework.QuickQuery.Config.Enum.ValidationType.Regex.ToString() ?                                   Com.Centaline.Framework.QuickQuery.Config.Enum.ValidationType.Regex : ValidationType.None,                                });                            }                            else if ("CountSql".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].QuerySentence.CountSql = xmlReader.ReadString();                            }                            else if ("BaseSql".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].QuerySentence.BaseSql = xmlReader.ReadString();                            }                            else if ("GroupSql".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].QuerySentence.GroupSql = xmlReader.ReadString();                            }                            else if ("OrderBySql".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].QuerySentence.OrderBySql = xmlReader.ReadString();                            }                            else if ("WhereSql".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].QuerySentence.WhereSql = xmlReader.ReadString();                            }                            else if ("Column".Equals(xmlReader.Name, StringComparison.CurrentCulture))                            {                                query.DataQuerys[dataQueryIndex - 1].Grid.Columns.Add(new Entity.Column()                                {                                    Name = xmlReader.GetAttribute("Name"),                                    Type = xmlReader.GetAttribute("Type") == ColumnType.Both.ToString() ?                                    ColumnType.Both : xmlReader.GetAttribute("Type") == ColumnType.Virtual.ToString() ?                                    ColumnType.Virtual : xmlReader.GetAttribute("Type") == ColumnType.JoinQuery.ToString() ?                                    ColumnType.JoinQuery : xmlReader.GetAttribute("Type") == ColumnType.JoinQuickQuery.ToString() ?                                    ColumnType.JoinQuickQuery : xmlReader.GetAttribute("Type") == ColumnType.Search.ToString() ?                                    ColumnType.Search : xmlReader.GetAttribute("Type") == ColumnType.Show.ToString() ?                                    ColumnType.Show : ColumnType.NULL,                                    Format = xmlReader.GetAttribute("Format"),                                    IsSort = Convert.ToBoolean(xmlReader.GetAttribute("IsSort")),                                    Order= xmlReader.GetAttribute("Order"),                                    ReferenceColumn = xmlReader.GetAttribute("ReferenceColumn"),                                    Index = xmlReader.GetAttribute("Index"),                                    ValueConvertType = xmlReader.GetAttribute("ValueConvertType") == ValueConvertType.Formatter.ToString() ?                                    ValueConvertType.Formatter : xmlReader.GetAttribute("ValueConvertType") == ValueConvertType.Dictionary.ToString() ?                                    ValueConvertType.Dictionary : ValueConvertType.NULL,                                    ValueConverter = xmlReader.GetAttribute("ValueConverter"),                                    Field =xmlReader.GetAttribute("Field"),                                    Title = xmlReader.GetAttribute("Title"),                                    FieldType = xmlReader.GetAttribute("FieldType"),                                    QuickQueryId = xmlReader.GetAttribute("QuickQueryId"),                                    VirtualColumnDataSourceType = xmlReader.GetAttribute("VirtualColumnDataSourceType") == VirtualColumnDataSourceType.Column.ToString() ?                                    VirtualColumnDataSourceType.Column : xmlReader.GetAttribute("VirtualColumnDataSourceType") == VirtualColumnDataSourceType.Result.ToString() ?                                    VirtualColumnDataSourceType.Result : xmlReader.GetAttribute("VirtualColumnDataSourceType") == VirtualColumnDataSourceType.Row.ToString() ?                                    VirtualColumnDataSourceType.Row : VirtualColumnDataSourceType.NULL                                });                            }                            break;                        default:                            break;                    }                }                Monitor.Watch("end XmlReadQueryConfigParser.");                resource.Stream.Close();                resource.Stream.Dispose();                resource.Stream = null;                return query;            }        }    }


0 0
原创粉丝点击