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
- xmlwriter代替deserialize来进行性能优化
- 【Android性能优化】尽可能用RelativeLayout来代替多层嵌套的LinearLayout
- 对Thread中MessageQueue进行操作来优化性能
- 性能优化:==代替equals
- Android_使用SparseArray代替HashMap优化性能
- Android:使用SparseArray代替HashMap优化性能
- XmlWriter
- XMLWriter
- XMLWriter
- SQL联合查询优化 用union all来代替union
- SQL联合查询优化 用union all来代替union
- 使用union来代替字段嵌套子查询优化
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递 Android内存优化(使用SparseArray和ArrayMap代替HashMap)
- 如何进行rails性能优化
- 如何进行SQL性能优化
- 使用instrument进行性能优化
- 性能优化:使用SparseArray代替HashMap<Integer,Object>
- 前端性能优化:使用Array.prototype.join代替字符串连接
- C语言学习随笔记之EOF用法
- CharSequence int
- 《第一行代码》阅读记录—UI设计
- Python 进阶_OOP 面向对象编程_组合与继承
- django validate报错
- xmlwriter代替deserialize来进行性能优化
- 关于Android intent
- 第二章上机练习1 我的银行系统的取款功能
- 448. Find All Numbers Disappeared in an Array
- cpp的STL算法
- 二叉堆
- Codves3914 昆虫繁殖 递推 fib变形
- ProtocolBuffer for Objective-C 运行环境配置及使用
- ELK 日志监控平台环境搭建及使用说明