当前位置: 移动技术网 > IT编程>开发语言>c# > In .net 4.8,calculate the time cost of serialization in BinaryFormatter,NewtonSoft.json,and System.Text.Json.JsonSerializer.Serialize

In .net 4.8,calculate the time cost of serialization in BinaryFormatter,NewtonSoft.json,and System.Text.Json.JsonSerializer.Serialize

2019年11月24日  | 移动技术网IT编程  | 我要评论
I had validated in .net 4.8 NewtonSoft.Json's speed rank 1st,System.Text.Json.JsonSerializer.Serialize 2nd,and BinaryFormatter 3rd. ...
 using consoleapp390.model;
using newtonsoft.json;
using system;
using system.collections.generic;
using system.diagnostics;
using system.io;
using system.linq;
using system.runtime.serialization;
using system.runtime.serialization.formatters.binary;
using system.text;
using system.threading;
using system.threading.tasks;

namespace consoleapp390
{
    class program
    {
        static void main(string[] args)
        {
            serializationdemo(); 
        }

        static void serializationdemo()
        {
            list<salesorderdetail> datalist = getlist();
            bool isbusy = false;
            for(int i=0;i<10;i++)
            {
                if(!isbusy)
                {
                    isbusy = true;                   

                    task task = task.run(() => 
                    {
                        testcostdemo(datalist);
                    });
                    task.wait();

                    console.writeline($"task {i} has finished!");
                    isbusy = false;
                }
            }            
        }
        static void testcostdemo(list<salesorderdetail> datalist)
        {
            stringbuilder msgbuilder = new stringbuilder();
            stopwatch sw = new stopwatch();

            sw.start();
            console.writeline($"binaryformatterdemo started at {datetime.now.tostring("yyyymmddhhmmssffff")}");
            binaryformatterdemo<salesorderdetail>(datalist);
            sw.stop();
            console.writeline($"binaryformatterdemo stopped at {datetime.now.tostring("yyyymmddhhmmssffff")}");
            msgbuilder.append($"in  .net 4.8,now {datetime.now.tostring("yyyymmddhhmmssffff")} binaryformatterdemo cost {sw.elapsedmilliseconds} milliseconds.");

            sw.restart();
            console.writeline($"newtonjsondemo started at {datetime.now.tostring("yyyymmddhhmmssffff")}");
            newtonjsondemo<salesorderdetail>(datalist);
            sw.stop();
            console.writeline($"newtonjsondemo stopped at {datetime.now.tostring("yyyymmddhhmmssffff")}");
            msgbuilder.append($"newtonjsondemo cost {sw.elapsedmilliseconds} milliseconds.");

            sw.restart();
            console.writeline($"jsonserializerdemo started at {datetime.now.tostring("yyyymmddhhmmssffff")}");
            jsonserializerdemo<salesorderdetail>(datalist);
            sw.stop();
            console.writeline($"jsonserializerdemo stopped at {datetime.now.tostring("yyyymmddhhmmssffff")}");
            msgbuilder.appendline($"jsonserializerdemo cost {sw.elapsedmilliseconds} milliseconds.\n\n");
            string msg = msgbuilder.tostring();
            printmsg(msg);
        }

        private static void printmsg(string msg)
        {
            console.writeline(msg);
            debug.writeline(msg);
            logresult(msg);
        }

        static list<salesorderdetail> getlist()
        {
            using (adventureworks2017entities db = new adventureworks2017entities())
            {
                list<salesorderdetail> datalist = new list<salesorderdetail>(db.salesorderdetails);
                return datalist;
            }
        }
        static void binaryformatterdemo<t>(list<t> datalist)
        {
            using (filestream fs = new filestream($"{guid.newguid().tostring().substring(0, 6)}binformatter.dat", filemode.create))
            {
                binaryformatter binformatter = new binaryformatter();
                try
                {
                    binformatter.serialize(fs, datalist);
                }
                catch (serializationexception e)
                {
                    console.writeline($"binaryformatter serialize ex:{e.stacktrace}");
                }
            }
        }
        static void newtonjsondemo<t>(list<t> datalist)
        {
            try
            {
                string jsonstring = jsonconvert.serializeobject(datalist);
            }
            catch (serializationexception ex)
            {
                console.writeline($"newtonjson serialization ex :{ex.stacktrace}");
            }
        }
        static void jsonserializerdemo<t>(list<t> datalist)
        {
            try
            {
                string msjsonserializerstring = system.text.json.jsonserializer.serialize(datalist);
            }
            catch (serializationexception ex)
            {
                console.writeline($"system.text.json.jsonserializer ex:{ex.stacktrace}");
            }
        }
        static void logresult(string msg)
        {
            string logpath = @"log.txt";
            using (streamwriter logwriter = new streamwriter(logpath, true, encoding.utf8))
            {
                logwriter.writeline(msg);
            }
        }          
    }
}

i had validated in .net 4.8 newtonsoft.json's speed rank 1st,system.text.json.jsonserializer.serialize 2nd,and binaryformatter 3rd.

 

in  .net 4.8,now 201911231857080779 binaryformatterdemo cost 1679 milliseconds.newtonjsondemo cost 1182 milliseconds.jsonserializerdemo cost 1387 milliseconds.



in  .net 4.8,now 201911231857123745 binaryformatterdemo cost 1686 milliseconds.newtonjsondemo cost 823 milliseconds.jsonserializerdemo cost 947 milliseconds.



in  .net 4.8,now 201911231857158273 binaryformatterdemo cost 1676 milliseconds.newtonjsondemo cost 797 milliseconds.jsonserializerdemo cost 992 milliseconds.



in  .net 4.8,now 201911231857193271 binaryformatterdemo cost 1704 milliseconds.newtonjsondemo cost 786 milliseconds.jsonserializerdemo cost 987 milliseconds.



in  .net 4.8,now 201911231857227811 binaryformatterdemo cost 1672 milliseconds.newtonjsondemo cost 777 milliseconds.jsonserializerdemo cost 983 milliseconds.



in  .net 4.8,now 201911231857261715 binaryformatterdemo cost 1582 milliseconds.newtonjsondemo cost 840 milliseconds.jsonserializerdemo cost 985 milliseconds.



in  .net 4.8,now 201911231857296400 binaryformatterdemo cost 1642 milliseconds.newtonjsondemo cost 828 milliseconds.jsonserializerdemo cost 973 milliseconds.



in  .net 4.8,now 201911231857331241 binaryformatterdemo cost 1664 milliseconds.newtonjsondemo cost 786 milliseconds.jsonserializerdemo cost 1006 milliseconds.



in  .net 4.8,now 201911231857366239 binaryformatterdemo cost 1698 milliseconds.newtonjsondemo cost 762 milliseconds.jsonserializerdemo cost 999 milliseconds.



in  .net 4.8,now 201911231857400455 binaryformatterdemo cost 1661 milliseconds.newtonjsondemo cost 780 milliseconds.jsonserializerdemo cost 992 milliseconds.

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

  • 如何使用C# 捕获进程输出

    intro很多时候我们可能会需要执行一段命令获取一个输出,遇到的比较典型的就是之前我们需要用 ffmpeg 实现视频的编码压缩水印等一系列操作,当时使用的是 f... [阅读全文]
  • 全面分析c# LINQ

    大家好,这是 [c#.net 拾遗补漏] 系列的第 08 篇文章,今天讲 c# 强大的 linq 查询。linq 是我最喜欢的 c# 语言特性之一。linq 是... [阅读全文]
  • C# DataTable常见用法汇总

    c# datatable 的常见用法:(1)新建数据表。(2)向表添加列。(3)设置表特定行与列的数据值。(4)将某行数据加入到表。(5)合并表。(6)复制表。... [阅读全文]
  • C# 如何解析获取Url参数值

    今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串。样... [阅读全文]
  • C# 实现dataGridView选中一行右键出现菜单的示例代码

    在窗体中添加datagridview控件和contextmenustrip1控件,修改datagridview属性,将contextmenustrip控件绑定d... [阅读全文]
  • WPF实现手风琴式轮播图切换效果

    WPF实现手风琴式轮播图切换效果

    本文实例为大家分享了wpf实现轮播图切换效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、自定义控件myimagecontrol实现图片的裁切和动... [阅读全文]
  • WPF实现3D翻牌式倒计时特效

    WPF实现3D翻牌式倒计时特效

    本文实例为大家分享了wpf实现3d翻牌式倒计时的具体代码,供大家参考,具体内容如下实现效果如下:思路:使用自定义控件,设置一个背板 mycardcontrolb... [阅读全文]
  • WPF实现平面三角形3D运动效果

    WPF实现平面三角形3D运动效果

    本文实例为大家分享了wpf实现平面三角形3d运动效果的具体代码,供大家参考,具体内容如下实现效果如下:思路:封装三角形三个顶点和路径的三角形类,图形渲染时同步更... [阅读全文]
  • WPF实现3D粒子波浪效果

    WPF实现3D粒子波浪效果

    本文实例为大家分享了wpf实现3d粒子波浪效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、3d粒子类particle.cs2、粒子系统parti... [阅读全文]
  • 谈谈c#中的索引器

    概念索引器(indexer) 允许类中的对象可以像数组那样方便、直观的被引用。当为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array... [阅读全文]
验证码:
移动技术网