探秘GO语言《比较C#与GO的性能--XML序列化》
今天对GO和NET的XML字符串序列化成对象列表做了一个性能比较,得出一些结论。
GO的代码:
package main import (
"encoding/xml"
"io/ioutil"
"log"
) type Result struct {
XMLName xml.Name `xml:"ArrayOfDoc"`
Persons []Person `xml:"doc"`
} type Person struct {
Url string `xml:"url"`
Docno string `xml:"docno"`
Contenttitle string `xml:"contenttitle"`
Content string `xml:"content"`
} func main() { content, err := ioutil.ReadFile("E:\\Xml\\test2.xml")
if err != nil {
log.Fatal(err)
}
var result Result
timer2 := time.NewTimer(time.Second)
err = xml.Unmarshal(content, &result) if err != nil {
log.Fatal(err)
}
log.Println(len(result.Persons))
}
NET的代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.XPath; namespace ConsoleApplicationDataInsert
{
class Program
{
static void Main(string[] args)
{
IList<string> files = new List<string>();
files.Add(@"E:\Xml\test2.xml");
int count = 0;
Console.WriteLine(DateTime.Now.ToString() + " 开始解析");
foreach (var file in files)
{
string xml = File.ReadAllText(file);
Console.WriteLine(DateTime.Now.ToString() + " 读取完毕");
var listModel = Deserialize(typeof(List<doc>), xml) as List<doc>;
count += listModel.Count;
} /*
List<doc> list = new List<doc>();
list.Add(new doc() { content = "abdcdsfds", contenttitle = "rewrewre", docno = "rtrwetrew", url = "rewrewrewrew" });
list.Add(new doc() { content = "abdcfewrwdsfds", contenttitle = "rewrewfdsare", docno = "rtrwetrfdsew", url = "rewrewrefdsfwrew" });
string xml2 = Serializer(typeof(List<doc>), list);
* */ Console.WriteLine(DateTime.Now.ToString() + " 解析完成,总共:" + count);
Console.Read();
} static object Deserialize(Type type, string xml)
{
try
{
using (StringReader sr = new StringReader(xml))
{
XmlSerializer xmldes = new XmlSerializer(type);
return xmldes.Deserialize(sr);
}
}
catch (Exception e)
{
return null;
}
} static string Serializer(Type type, object obj)
{
MemoryStream Stream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(type);
try
{
//序列化对象
xml.Serialize(Stream, obj);
}
catch (InvalidOperationException)
{
throw;
}
Stream.Position = 0;
StreamReader sr = new StreamReader(Stream);
string str = sr.ReadToEnd(); sr.Dispose();
Stream.Dispose(); return str;
}
} public class doc
{
public string url { get; set; }
public string docno { get; set; }
public string contenttitle { get; set; }
public string content { get; set; }
} }
两者都是对一个170M(里面有70203个XML对象)的XML文件进行序列化,将XML字符串序列化成对象列表。
GO每次的运行时间大致是12秒左右。
NET的运行时间大致是2秒左右。
可以看出GO在XML的处理上还是比NET慢了一个档次,希望谷歌以后能优化这个功能。
探秘GO语言《比较C#与GO的性能--XML序列化》的更多相关文章
- 探秘GO语言《比较C#与GO的性能》
这段时间也来学学GO语言,听说它的性能相当的棒棒,我就拿C#来和它做比对一下. 这里只是单纯了做了for循环的比对,看看谁的循环快 C# 代码: static void Main(string[] a ...
- [笔记]Go语言写文件几种方式性能对比
Go语言中写文件有多种方式,这里进行如下几种方式的速度对比: 打开文件,写入内容,关闭文件.如此重复多次 打开文件,写入内容,defer 关闭文件.如此重复多次 打开文件,重复多次写入内容,defer ...
- [笔记]Go语言的字符串拼装方式性能对比
Go语言中字符串的拼装方法很多,那么问题来了,到底哪家性能好? 下面代码,分别比较了 fmt.Sprintf,string +,strings.Join,bytes.Buffer,方法是循环若干次比较 ...
- Go语言中的数据格式(json、xml 、msgpack、protobuf)
在分布式的系统中,因为涉及到数据的传输,所以一定会进行数据的交换,此时就要定义数据交换的格式,例如二进制.Json.Xml等等.本篇文章就是总结一下常用的几种数据格式. 一.Json格式 如果想使用J ...
- Go语言实现:【剑指offer】序列化二叉树
该题目来源于牛客网<剑指offer>专题. 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建 ...
- 【机器学习与R语言】13- 如何提高模型的性能?
目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...
- 【机器学习与R语言】12- 如何评估模型的性能?
目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_5_InvalidClassException异常_原理
序列化一遍 反序列化再来一遍 age的修饰符改为public 直接反序列化就会抛出异常 序列化的时候会给Person.class添加序列号,serialVersionUID,.反序列化需要对比这个se ...
随机推荐
- redis3.2.9编译安装
Redis 3.2.9 安装 Redis 3.2.9 编译安装 1, 安装相关软件包 2, 下载redis源码包 wget http://source.goyun.org:8000/sourc ...
- PHP修改图片
这篇是关于修改图片的效果,主要还是用到php中的GD库中的函数,没想到php还有这凶残能力,出乎我的预料. 先看代码upload_image.php,主要是一个上传控件,用来选择图片 <html ...
- c++计算器后续(1)
自娱自乐: 大概是一直在说的代码规范,大概是玩一玩,以上. 代码规范: 参考原文:链接 相关节选: 4 程序的版式 4.4规则:较长的语句(>80字符)要分成多行书写. 4.5规则:不允许把多个 ...
- 当有多个相同的DIV时,我怎么判断我点击的是哪个嘞
链接:https://segmentfault.com/a/1190000003480973?utm_source=tuicool&utm_medium=referral 序言 这是我曾经面试 ...
- olivehc--百度开源的cdn cache
github 地址:http://git.baidu.com/olivehc/olivehc 主要是为了方便管理,百度cdn承载了全百度40%的流量,但是cdn团队只有几个人(一次培训中提到只有4个) ...
- Anaconda安装及pygame的安装
python有很多版本,还是Anaconda最好用啦,因为它有强大而方便的包管理与环境管理的功能... Pygame是Python最经典的2D游戏开发第三方库,也支持3D游戏开发,,最近课余开始学这个 ...
- 自定义控件(视图)2期笔记13:View的滑动冲突之 内部拦截法
1. 内部拦截法: 父容器不拦截事件,所有的事件全部都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交给父容器进行处理. 这种方法和Android中的事件分发机制不一样,需要配合request ...
- 最大传输单元MTU
http://baike.baidu.com/link?url=mU41JFjZzOb3R5crQFCNdocT5ovAswcoIqL2A4U6O5Re_U0-HIYndHG0vSKwc6HbptvH ...
- domain是什么
一:domain表达式 domain表达式:通常用来筛选数据记录.它们使用特殊的语法,以便于Odoo ORM 将它们解析后生成对应的SQL WHERE数据库筛选语句. 二:domain的写法 doma ...
- Dubbo实践(二)架构
架构 节点角色说明 节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和 ...