tests/DeepClonePerformanceTest/Program.cs

(开头部分) 12KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

#pragma warning disable CS8618
using DotNetCommon.Extensions;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;

namespace DeepClonePerformanceTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var list = new List<Person>();
            for (int i = 0; i < 100; i++)
            {
                list.Add(new Person() { Id = i + 1, Name = i + 1 + "-name", Age = Random.Shared.Next(5, 10) + 15, Birth = DateTime.Parse("1995-01-02"), CreateTime = DateTime.Now, UpdateTime = DateTime.Now, Desc = i + 1 + "-desc", Phone = "027-12345678", Score = 95, State = EnumState.Normal });
            }

            //手写代码
            Console.WriteLine($"SrcClone--------------------------------List<Person>[Count=100]------------------------------------");
            TestSrcClone(list);

            //DeepClone 使用编译表达式
            Console.WriteLine();
            Console.WriteLine($"DeepClone--------------------------------List<Person>[Count=100]------------------------------------");
            TestDeepClone(list, false);

            //json 序列化反序列化
            Console.WriteLine();
            Console.WriteLine($"JsonSerial--------------------------------List<Person>[Count=100]------------------------------------");
            TestJsonSerial(list);

            //BinarySerialize 序列化反序列化
            Console.WriteLine();
            Console.WriteLine($"BinarySerial--------------------------------List<Person>[Count=100]------------------------------------");
            TestBinarySerial(list);

            Console.WriteLine("ok");
            Console.ReadLine();
        }

        static void TestSrcClone(List<Person> list)
        {
            list.Select(i => new Person { Id = i.Id, Age = i.Age, Birth = i.Birth, CreateTime = i.CreateTime, Desc = i.Desc, Name = i.Name, Phone = i.Phone, Score = i.Score, State = i.State, UpdateTime = i.UpdateTime }).ToList();
            var st = new Stopwatch();
            st.Start();
            var newList = list.Select(i => new Person { Id = i.Id, Age = i.Age, Birth = i.Birth, CreateTime = i.CreateTime, Desc = i.Desc, Name = i.Name, Phone = i.Phone, Score = i.Score, State = i.State, UpdateTime = i.UpdateTime }).ToList();
            st.Stop();
            Console.WriteLine($"1 次克隆\t\t\t耗时: {st.ElapsedMilliseconds} 毫秒,\t\t\t平均: {st.ElapsedMilliseconds / (1.0)} 毫秒");

            st.Restart();
            for (int i = 0; i < 100; i++)
            {
                var newList2 = list.Select(i => new Person { Id = i.Id, Age = i.Age, Birth = i.Birth, CreateTime = i.CreateTime, Desc = i.Desc, Name = i.Name, Phone = i.Phone, Score = i.Score, State = i.State, UpdateTime = i.UpdateTime }).ToList();
            }
            st.Stop();
            Console.WriteLine($"100 次克隆\t\t\t耗时: {st.ElapsedMilliseconds} 毫秒,\t\t\t平均: {st.ElapsedMilliseconds / (100 * 1.0)} 毫秒");

            st.Restart();
            for (int i = 0; i < 1000; i++)
后面还有 197 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。