今天对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慢了一个档次,希望谷歌以后能优化这个功能。

最新文章

  1. AJAX 状态值(readyState)与状态码(status)详解
  2. POJ 1159 回文串-LCS
  3. 关于ORACLE隐式转换后性能问题
  4. [原创]Gerrit中文乱码问题解决方案分享
  5. HDU 1251 统计难题【字典树】
  6. java &#39;相等&#39;的比较.
  7. hibernate+spring+mvc+Easyui框架模式下使用grid++report的总结
  8. PS不能存储,因为程序错误
  9. hbase分布式集群搭建
  10. 2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) - 4.28
  11. fastjson中对象转化为字符串时过滤某字段
  12. 设计模式--Proxy
  13. Mahalanobis距离(马氏距离)的“哲学”解释
  14. C#编程(三十五)----------foreach和yield
  15. jar 包和 mysql 服务器部署
  16. 小刘的深度学习---CNN
  17. 【docker】 docker容器内部安装vi命令
  18. SpringBoot使用SpringSecurity搭建基于非对称加密的JWT及前后端分离的搭建
  19. Httpservlet源码说明
  20. git 永久性设置密码

热门文章

  1. strncpy()函数【转】
  2. Apache,php配置
  3. 在android工程中添加图片资源(转加)
  4. MVC与EF结合:Contoso大学
  5. codeforces 388D Fox and Perfect Sets(线性基+数位dp)
  6. 寒假关于计算机课程的学习计划(第二次作业&lt;二&gt;)
  7. 9、RabbitMQ-集成Spring
  8. Kubernetes 学习2 k8s基础概念
  9. Android攻城狮学习笔记—入门篇二
  10. CCF认证201803-1 跳一跳