最近一个web模块在做性能测试,用lr一压,发现tps很低,还不到15。
问题很严重,虽然达到了需求中规定的要求,但是发现实在有点对不起观众。
决定对代码进行分析,我开始一段的一段的进行分析,查看执行时间。后来老大用jprofile分析,更快,看样子我有点土了。
很快我把问题定位在xml的序列化上,因为请求的参数都是xml报文,而我们使用的是castor来进行反序列化和序列化。发现消耗在这段的时间占总时间的一半,感觉不对劲。
后来我就直接写了个简单的测试例子,用jmeter来压,也很慢,然后我找网上的xstream来做同样的事情,性能比这个高10倍左右,看样子是castor对多线程支持不好,高并发下性能不行。
对比castor和XStream两个开源的组件序列化和反序列化xml的性能。
部署在weblogic上的例子,100个线程循环100次,以下是使用jmeter测试后的聚合报告截图:
castor
xstream
xstream的throughput的值最高能达到300。
通过对比,可以发现castor的性能存在问题。
后来察看castor的文档,发现在个文档(xml-best-practice.html)有对性能说明;
主要是说要对Descriptor classes 这种对象进行缓存,还好castor有这种机制,只要使用
XMLContext对象来创建(Un)Marshaller实例就行。具体看下面的代码:
private final static XMLContext xmlContext;
static {
xmlContext = new XMLContext();
try {
/**
* 请确保以下的目录下面有.castor.cdr这样的文件存在,
* 否则cache将不起作用
*/
xmlContext.addPackages(new String[]{"com.asiainfo.aidmccsupport.boss",
"com.asiainfo.aidmccsupport.boss.operate",
"com.asiainfo.aidmccsupport.boss.query"});
xmlContext.setProperty("ReuseObjects", true);
} catch (ResolverException e) {
e.printStackTrace();
}
}
经过这种优化,再用jmeter测试,发现性能上升了一倍,总体感觉估计还是castor的性能不行。
没办法,目前只能将就用castor,因为发现使用xstream来替代需要修改好多代码,主要是castor生成的javabean类文件中的属性都是带下划线的,而xstream要求属性名称和xml的节点名称一样才能解析。
- 大小: 42.4 KB
- 大小: 40.1 KB
分享到:
相关推荐
在编程领域,序列化是一个重要的...总的来说,选择二进制序列化还是XML序列化取决于应用场景的需求,如数据交换的格式要求、存储空间和性能等因素。在实际开发中,需要根据具体情况权衡利弊,选择最合适的序列化方式。
"12xml序列化器"可能是某个特定的库或者实现,旨在简化Android开发者在XML序列化和反序列化中的工作。 在Android中,XML序列化通常有两种主要方法:使用标准的Java库和使用Android提供的特殊工具。 1. **标准Java...
Xml序列化与反序列化是.NET框架中一种重要的数据转换技术,主要应用于将对象的状态转换成XML格式的字符串,便于存储或传输,同时也能够将XML数据还原为对象。在C#编程中,这一功能通常通过System.Xml.Serialization...
1. **创建一个XML序列化类**:首先,我们需要定义一个类,该类的属性与XML文件中的元素相对应。例如,如果XML文件包含电源配置信息,可能有一个类名为`PowerConfig`,其中包含如`Voltage`、`Current`和`Frequency`等...
掌握XML序列化和反序列化的方法,能够帮助我们更高效地处理数据,提高应用的性能和用户体验。通过实践上述案例,相信你对XML序列化有了更深入的理解。在实际项目中,可以根据需求选择适合的库或方法来实现XML操作。
XML序列化和反序列化是C#编程中处理数据存储和传输的重要技术。XML(Extensible Markup Language)是一种用于标记数据的语言,具有良好的可读性和跨平台性,使其成为网络数据交换的理想选择。C#提供了内置的支持来...
在.NET框架中,可以使用`XmlSerializer`类来实现XML序列化。首先,我们需要创建一个要序列化的对象实例,然后使用`Serialize`方法将该对象写入XML文件。例如: ```csharp using System.Xml.Serialization; public ...
Java模型(Model)和XML序列化是Java开发中常见的数据处理技术,主要用于对象与XML文档之间的转换。在本文中,我们将深入探讨这两种序列化方法,包括简单和复杂的情况。 首先,让我们理解Java Model。在软件工程中...
在.NET框架中,Windows Presentation Foundation (WPF) 是一个用于构建桌面应用程序的强大工具,而XML序列化是WPF中处理数据存储和交换的一种关键技术。本文将深入探讨XML序列化在WPF应用程序中的应用,以及如何进行...
尽管XML序列化在.NET中很方便,但其性能相比其他格式(如JSON)可能会较低。在性能敏感的应用中,可以考虑使用`DataContractSerializer`或`Json.NET`库进行序列化和反序列化。 ### 五、`XMLToModel`文件 在提供的...
XML序列化是将对象的状态转换为XML格式的过程,而反序列化则是将XML数据恢复为原来的对象状态。在这个压缩包文件中,我们可以期待找到关于XML序列化和反序列化的详细讲解,这将涵盖一系列关键知识点。 首先,我们要...
XML序列化和反序列化是.NET框架中处理对象与XML数据之间转换的重要技术。XML作为一种通用的数据交换格式,广泛应用于网络通信、配置文件存储、数据持久化等领域。本示例基于Visual Studio 2010,旨在帮助初学者理解...
在C#编程中,对象和XML序列化与反序列化是一项关键技能,它允许我们将对象的状态转换为XML格式的字符串,以便存储、传输或解析。本文将深入探讨这个主题,介绍相关概念、步骤以及如何在实际项目中应用。 首先,让...
对于XML序列化和ListView的集成,这可能涉及到自定义XML解析器,手动构建适配器逻辑,以及优化性能,如使用ViewHolder模式来提高ListView的滚动性能。 总的来说,XML序列化提供了将复杂数据结构转化为易于处理的XML...
在C#编程中,处理XML文件通常涉及XML序列化和反序列化的过程。XML序列化是将对象的状态转换为XML文档的过程,而XML反序列化则是将XML文档转换回对象的过程。这两个过程在项目中常用于保存和加载对象的状态,例如配置...
本篇将深入探讨如何使用C#进行XML序列化和反序列化,并且特别关注如何读取Word文档中的XML内容。 XML序列化是将对象的属性和字段转换为XML文档的过程,而反序列化则是相反的过程,即将XML数据转换回对象。这对于...
这里我们关注的是用友U8系统中的XML序列化和反序列化。用友U8是一款广泛应用于企业管理的ERP(企业资源计划)系统,而XML是一种通用的数据交换格式,它具有良好的可读性和可扩展性,常用于不同系统之间的数据交换。 ...
在.NET框架中,我们可以使用System.Xml.Serialization命名空间下的XmlSerializer类来实现XML序列化和反序列化。该类提供了两个主要的方法:Serialize和Deserialize,分别用于将对象序列化为XML字符串或从XML字符串反...
- **性能考量**:XML序列化可能会导致较大的文件大小和较长的序列化/反序列化时间,因此在性能敏感的应用程序中应谨慎使用。 - **安全考虑**:对于不可信的输入,应限制XML文档的大小和复杂度,以防止潜在的安全风险...
6. **性能和效率**:在处理大量数据时,优化XML序列化和反序列化的性能是关键。这可能涉及使用`BinaryFormatter`(适用于非XML的二进制格式)或者`DataContractSerializer`(更高效的XML序列化器),根据具体需求...