xmlwriter代替deserialize来进行性能优化

首先上代码,这边是抽象类里面的基类实现方法:
  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;
            }
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值