一下代码比较了二进制序列化、xml序列化、Protobuf序列化的运行时间,可是代码显得十分冗余,是否有大神可以指点一二,万分感谢

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
using System.Diagnostics;namespace ProtoBuf
{class Program{static void Main(string[] args){List<Person> list = new List<Person>();int count = 100;double SumTs1 = 0, SumTs2 = 0,SumTs3=0,SumTs4=0,SumTs5=0,SumTs6=0;for (var i=0;i<1000;i++){var person = new Person{Sno = i,Name = "Name" + i,Age = 20 + i,HomeTown="HomeTown"+i,Shool="Shool"+i,Country="Country"+i,Language="Language"+i,Professional="professional"+i,Study="study"+i,FatherName="fatherName"+i,MotherName="motherName"+i};list.Add(person);}do{//binary序列化开始DateTime binaryTime1 = System.DateTime.Now;BinaryFormatter bf = new BinaryFormatter();Stream BinaryStream = new FileStream("e:/person.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);//Stream BinaryStream = new MemoryStream();bf.Serialize(BinaryStream, list);BinaryStream.Close();DateTime binaryTime2 = System.DateTime.Now;//binary反序列化开始DateTime debinaryTime1 = System.DateTime.Now;Stream deBinaryStream = new FileStream("e:/person.txt", FileMode.Open, FileAccess.Read, FileShare.Read);//Stream deBinaryStream = new MemoryStream();object obj =bf.Deserialize(BinaryStream);deBinaryStream.Close();DateTime debinaryTime2 = System.DateTime.Now;//Xml序列化开始DateTime XmlTime1 = System.DateTime.Now;XmlSerializer xs = new XmlSerializer(typeof(List<Person>));Stream XmlStream = new FileStream("e:/2person.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);xs.Serialize(XmlStream, list);XmlStream.Close();DateTime XmlTime2 = System.DateTime.Now;//Xml反序列化开始DateTime deXmlTime1 = System.DateTime.Now;XmlSerializer dexs = new XmlSerializer(typeof(List<Person>));Stream deXmlStream = new FileStream("e:/2person.txt", FileMode.Open, FileAccess.Read, FileShare.Read);//Stream deXmlStream = new MemoryStream();List<Person> list2 = (List<Person>)dexs.Deserialize(deXmlStream);deXmlStream.Close();DateTime deXmlTime2 = System.DateTime.Now;//ProtoBuf序列化开始DateTime ProtoBufTime1 = System.DateTime.Now;Stream ProtoBufStream = new MemoryStream();ProtoBuf.Serializer.Serialize(ProtoBufStream, list);ProtoBufStream.Close();DateTime ProtoBufTime2 = System.DateTime.Now;//ProtoBuf反序列化开始DateTime deProtoBufTime1 = System.DateTime.Now;Stream deProtoBufStream = new MemoryStream();Person newPerson = ProtoBuf.Serializer.Deserialize<Person>(deProtoBufStream);deProtoBufStream.Close();DateTime deProtoBufTime2 = System.DateTime.Now;//计算时间和运行次数SumTs1 += binaryTime2.Subtract(binaryTime1).TotalMilliseconds;SumTs2 += debinaryTime2.Subtract(debinaryTime1).TotalMilliseconds;SumTs3 += XmlTime2.Subtract(XmlTime1).TotalMilliseconds;SumTs4 += deXmlTime2.Subtract(deXmlTime1).TotalMilliseconds;SumTs5 += ProtoBufTime2.Subtract(ProtoBufTime1).TotalMilliseconds;SumTs6 += deProtoBufTime2.Subtract(deProtoBufTime1).TotalMilliseconds;count--;} while (count > 0);Console.WriteLine("*********************************序列化比较结果************************************");Console.WriteLine("***            binary序列化        Xml序列化         ProtoBuf序列化        ");Console.WriteLine("***序列化      "+SumTs1/100+"           "+SumTs3/100+"          "+SumTs5/100);Console.WriteLine("***反序列化    "+SumTs2/100+"             "+SumTs4/100+"         "+SumTs6/100);Console.WriteLine("**********************************************************************************");}}[ProtoBuf.ProtoContract][Serializable]public class Person{public int Sno { get; set; }public string Name { get; set; }public int Age { get; set; }public string HomeTown { get; set; }public string Shool { get; set; }public string Country{get;set;}public string Language{get;set;}public string Professional{get;set;}public string Study{get;set;}public string FatherName{get;set;}public string MotherName{get;set;}}
}

转载于:https://www.cnblogs.com/Freedom0619/p/4121630.html

三种序列化方式性能比较相关推荐

  1. Kryo,Hessain,Protostuff三种序列化方式对比

    前言 前段时间在写RPC框架的时候用到了Kryo.Hessian.Protostuff三种序列化方式.但是当时因为急于实现功能,就只是简单的的看了一下如何使用这三种序列化方式,并没有去深入研究各自的特 ...

  2. C#代码考究--foreach、for和dictionary三种遍历方式性能比较

    在日常开发过程中,我们会经常用到遍历,那么几种遍历方式有什么优缺点呢? 一.foreach: 本文foreach案例是对泛型List进行遍历操作 List<int> m_list = ne ...

  3. oracle Hash Join及三种连接方式

    在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...

  4. 三种去重方式——HashSet、Redis去重、布隆过滤器(BloomFilter)

    三种去重方式 去重就有三种实现方式,那有什么不同呢? HashSet 使用java中的HashSet不能重复的特点去重.优点是容易理解.使用方便. 缺点:占用内存大,性能较低. Redis去重 使用R ...

  5. java如何实现定时任务_Java定时任务的三种实现方式

    前言 现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了. 很多业务需求的实现都离不开定时任务,例如,每月一号,移动将清 ...

  6. 分布式锁简单入门以及三种实现方式介绍(滴滴)

    很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的 ...

  7. 工业以太网交换机的三种转发方式

    交换(switching)是按照通信两端传输信息的要求,用人工或设备自动完成的方法,把要传输的信息送到符合要求的相应路由上的技术的统称.根据工作位置的不同,可以分为广域网交换机和局域网交换机.广域网的 ...

  8. spring三种注入方式

    设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUni ...

  9. mysql几种安装方法_mysql的三种安装方式(详细)

    安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...

最新文章

  1. 获取另一个驱动的设备结构体_《rt-thread驱动框架分析》-i2c驱动
  2. 为什么SOFA RPC调用30s还不超时?
  3. 还在修改博士论文?这份《博士论文写作技巧》为你指南
  4. hadoop漏洞_【漏洞公告】CVE-2017-7669:Apache Hadoop远程权限提升漏洞
  5. python mongodb_python实现mongodb的增删改查
  6. 合并两个有序链表(Java)
  7. 微信分享至朋友圈和朋友接口
  8. Excel 电子表格文件格式剖析
  9. 树莓派C语言超声波传感器测距
  10. mysql 二次方函数_MySQL SQRT函数:求二次方根
  11. Java 超简单实现邮件群发工具类 | 泰山出品
  12. Tableau 中国最美八条骑行线路(三)天数与预算
  13. iOS 图标左侧小黄点
  14. 【2021-07-26】JS逆向之某某西游藏宝阁
  15. Spring笔记(4):响应式编程、Reactor、WebFlux、Flow
  16. 项目经理怎么评估工时?
  17. Ftp下载文件超时处理
  18. Javaweb day05
  19. python给图像添加噪声(高斯噪声、椒盐噪声)
  20. RoHS1.0 仪器操作规范指导

热门文章

  1. gatsby_如何使用Gatsby和Leaflet创建夏季公路旅行地图绘制应用程序
  2. nvm npm不是内部命令_npm作弊表-最常见的命令和nvm
  3. 粒子滤波 应用_如何使用NativeScript开发粒子物联网应用
  4. 这是如何更好地利用JavaScript数组的方法
  5. 集成测试_渐增与非渐增模式优缺点
  6. python 列表维度_如何输出python中list的维度
  7. 前端中的this,指的是什么?
  8. was unable to refresh its cache! status = Cannot execute request on any known server
  9. go微服务框架go-micro深度学习(一) 整体架构介绍
  10. Centos 6.4下MySQL备份及还原详情介绍