Example #1
0
        /// <summary>开始</summary>
        public static void Start()
        {
            Int32 max   = 10000;
            var   pool1 = new ObjectPool <T>();

            pool1.Stock = new SafeStack <T>(max);
            var pool2 = new ObjectPool <T>();

            pool2.Stock = new InterlockedStack <T>();
            var pool3 = new ObjectPool <T>();

            pool3.Stock = new InterlockedStack <T>()
            {
                UseNodePool = true
            };
            var pool4 = new ObjectPool <T>();

            pool4.Stock = new LockStack <T>();

            pool1.Max = pool2.Max = pool3.Max = pool4.Max = max;

            // 各准备对象
            Console.WriteLine("准备对象池:{0}", max);
            var sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < max; i++)
            {
                var e = new T();
                pool1.Push(e);
                pool2.Push(e);
                pool3.Push(e);
                pool4.Push(e);
            }
            sw.Stop();
            Console.WriteLine("准备耗时:{0}", sw.Elapsed);

            Int32 times = 10000000;

            CodeTimer.ShowHeader();
            Test("SafeStack", pool1, max, times);
            Test("InterlockedStack", pool2, max, times);
            Test("InterlockedStack", pool3, max, times);
            Test("LockStack", pool4, max, times);

            var rnd = new Random((Int32)DateTime.Now.Ticks);
            // 准备一个随机序列
            var rs = new Boolean[10000];

            for (int i = 0; i < rs.Length; i++)
            {
                rs[i] = rnd.Next(0, 2) == 0;
            }

            Console.WriteLine();
            Test2("SafeStack 随机", pool1, max, times, rs);
            Test2("Interlocked 随机", pool2, max, times, rs);
            Test2("Interlocked 随机", pool3, max, times, rs);
            Test2("LockStack 随机", pool4, max, times, rs);
        }
Example #2
0
        static void Test4()
        {
            XTrace.WriteLine("111");

            var count = 10000000;

            CodeTimer.ShowHeader("上下文切换性能测试");
            CodeTimer.TimeLine("QueueUserWorkItem", count, n => ThreadPool.QueueUserWorkItem(s => Thread.Sleep(1000)));
            CodeTimer.TimeLine("UnsafeQueueUserWorkItem", count, n => ThreadPool.UnsafeQueueUserWorkItem(s => Thread.Sleep(1000), null));
        }
Example #3
0
        static void Test7()
        {
            //Console.Write("请输入表达式:");
            //var code = Console.ReadLine();

            //var rs = ScriptEngine.Execute(code, new Dictionary<String, Object> { { "a", 222 }, { "b", 333 } });
            ////Console.WriteLine(rs);

            //var se = ScriptEngine.Create(code);
            //var fm = code.Replace("a", "{0}").Replace("b", "{1}");
            //for (int i = 1; i <= 9; i++)
            //{
            //    for (int j = 1; j <= i; j++)
            //    {
            //        Console.Write(fm + "={2}\t", j, i, se.Invoke(i, j));
            //    }
            //    Console.WriteLine();
            //}

            var se = ScriptEngine.Create("Test.Program.TestMath(k)");

            if (se.Method == null)
            {
                se.Parameters.Add("k", typeof(Double));
                se.Compile();
            }

            var fun = (DM)(Object)Delegate.CreateDelegate(typeof(DM), se.Method as MethodInfo);

            var timer = 1000000;
            var k     = 123;

            CodeTimer.ShowHeader();
            CodeTimer.TimeLine("原生", timer, n => TestMath(k));
            CodeTimer.TimeLine("动态", timer, n => se.Invoke(k));
            CodeTimer.TimeLine("动态2", timer, n => fun(k));
        }
Example #4
0
        /// <summary>开始测试</summary>
        public static void Start()
        {
            // 提升进程优先级
            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle;

            // 为所有Json宿主创建实例
            var hosts = typeof(IJsonHost).GetAllSubclasses().Select(e => e.CreateInstance() as IJsonHost).ToArray();

            Console.Clear();

            for (int i = 0; i < 2; i++)
            {
                var obj = Create(i > 0);

                var json = "";
                Console.WriteLine("{0} Json序列化大小", i == 0 ? "普通" : "高级");
                foreach (var item in hosts)
                {
                    json = item.Write(obj, true);
                    Console.WriteLine("{0}\t大小:{1:n0}", item.GetType().Name, json.GetBytes().Length);
                    Console.WriteLine(json);

                    item.Read(json, obj.GetType());
                }
                {
                    var bn = new BinaryFormatter();
                    var ms = new MemoryStream();
                    bn.Serialize(ms, obj);
                    Console.WriteLine("{0}\t大小:{1:n0}", bn.GetType().Name, ms.Length);
                }
                {
                    var bn = new Binary();
                    bn.Write(obj);
                    Console.WriteLine("{0}\t大小:{1:n0}", bn.GetType().Name, bn.Stream.Length);
                }

                CodeTimer.ShowHeader("Json序列化性能测试");
                foreach (var item in hosts)
                {
                    CodeTimer.TimeLine(item.GetType().Name, 100000, n => { item.Write(obj); });
                }
                CodeTimer.TimeLine("BinaryFormatter", 100000, n =>
                {
                    var bn = new BinaryFormatter();
                    var ms = new MemoryStream();
                    bn.Serialize(ms, obj);
                });
                CodeTimer.TimeLine("Binary", 100000, n =>
                {
                    var bn = new Binary();
                    bn.Write(obj);
                });

                Console.WriteLine();
                CodeTimer.ShowHeader("Json反序列化性能测试");
                foreach (var item in hosts)
                {
                    CodeTimer.TimeLine(item.GetType().Name, 100000, n => { item.Read(json, obj.GetType()); });
                }
                CodeTimer.TimeLine("JsonParser", 100000, n =>
                {
                    var jp = new JsonParser(json);
                    jp.Decode();
                });
            }
        }
Example #5
0
        /// <summary>开始测试</summary>
        public static void Start()
        {
            // 提升进程优先级
            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle;

            // 为所有Binary宿主创建实例
            Console.Clear();

            var ks = new String[] { "普通", "高级", "名值普通", "名值高级" };

            for (int i = 0; i < 4; i++)
            {
                var ext = i == 1 || i == 3;
                var unm = i == 2 || i == 3;
                var obj = Create(ext);

                Byte[] buf = null;
                Byte[] bts = null;
                Console.WriteLine("{0} 序列化", ks[i]);
                {
                    var bn = new Binary();
                    //bn.Log = XTrace.Log;
                    //bn.EnableTrace();
                    if (!ext)
                    {
                        SetExt(bn);
                    }
                    if (unm)
                    {
                        bn.AddHandler <BinaryPair>();
                    }
                    bn.Write(obj);

                    buf = bn.GetBytes();
                    Console.Write("{0}\t大小:{1:n0}\t", bn.GetType().Name, bn.Stream.Length);
                    bn.Stream = new MemoryStream(buf);
                    //bn.EnableTrace();
                    bn.Read(obj.GetType());
                }
                {
                    var bn = new BinaryFormatter();
                    var ms = new MemoryStream();
                    bn.Serialize(ms, obj);

                    bts = ms.ToArray();
                    Console.WriteLine("{0}\t大小:{1:n0}", bn.GetType().Name, ms.Length);
                }

                CodeTimer.ShowHeader("序列化");
                CodeTimer.TimeLine("Binary", 100000, n =>
                {
                    var bn = new Binary();
                    if (!ext)
                    {
                        SetExt(bn);
                    }
                    if (unm)
                    {
                        bn.AddHandler <BinaryPair>();
                    }
                    bn.Write(obj);
                });
                CodeTimer.TimeLine("BinaryFormatter", 100000, n =>
                {
                    var bn = new BinaryFormatter();
                    var ms = new MemoryStream();
                    bn.Serialize(ms, obj);
                });

                Console.WriteLine();
                CodeTimer.ShowHeader("反序列化");
                CodeTimer.TimeLine("Binary", 100000, n =>
                {
                    var bn = new Binary();
                    if (!ext)
                    {
                        SetExt(bn);
                    }
                    if (unm)
                    {
                        bn.AddHandler <BinaryPair>();
                    }
                    bn.Stream = new MemoryStream(buf);
                    bn.Read(obj.GetType());
                });
                CodeTimer.TimeLine("BinaryFormatter", 100000, n =>
                {
                    var bn = new BinaryFormatter();
                    var ms = new MemoryStream(bts);
                    bn.Deserialize(ms);
                });

                Console.WriteLine();
            }
        }