/// <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); }
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)); }
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)); }
/// <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(); }); } }
/// <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(); } }