Mercurial > pub > ImplabNet
comparison MonoPlay/Program.cs @ 103:b3f5bc613905 v2
sync
author | cin |
---|---|
date | Sat, 08 Nov 2014 10:02:47 +0300 |
parents | a43745f81f10 |
children | 5f10d54b45df |
comparison
equal
deleted
inserted
replaced
102:b4c4d65b7def | 103:b3f5bc613905 |
---|---|
1 using System; | 1 using System; |
2 using Implab.Diagnostics; | 2 using Implab.Diagnostics; |
3 using Implab.Parallels; | 3 using Implab.Parallels; |
4 using Implab; | 4 using Implab; |
5 using System.Collections.Generic; | |
6 using System.Collections.Concurrent; | |
5 | 7 |
6 namespace MonoPlay { | 8 namespace MonoPlay { |
7 class MainClass { | 9 class MainClass { |
8 public static void Main(string[] args) { | 10 public static void Main(string[] args) { |
9 if (args == null) | 11 if (args == null) |
10 throw new ArgumentNullException("args"); | 12 throw new ArgumentNullException("args"); |
11 | 13 |
12 var listener = new ConsoleTraceListener(true); | 14 var q1 = new MTQueue<int>(); |
13 listener.Subscribe<TraceEvent>(); | 15 var q2 = new ConcurrentQueue<int>(); |
14 | 16 |
15 MTComponentContainer.AppContainer.Add(listener); | 17 const int count = 10000000; |
16 | 18 |
17 TraceLog.StartLogicalOperation("program"); | 19 var t1 = Environment.TickCount; |
18 | 20 |
19 TraceLog.StartLogicalOperation("async"); | 21 for (var i = 0; i < count; i++) |
20 AsyncPool.Invoke(() => { | 22 q1.Enqueue(i); |
21 TraceLog.TraceInformation("Hello async"); | |
22 TraceLog.StartLogicalOperation("foo"); | |
23 return 0; | |
24 }) | |
25 .EndLogicalOperation() | |
26 .Join(); | |
27 | 23 |
28 TraceLog.EndLogicalOperation(); | 24 var t2 = Environment.TickCount; |
25 Console.WriteLine("MTQueue: {0} ms", t2 - t1); | |
26 | |
27 t1 = Environment.TickCount; | |
28 | |
29 for (var i = 0; i < count; i++) | |
30 q2.Enqueue(i); | |
31 | |
32 t2 = Environment.TickCount; | |
33 Console.WriteLine("LinkedList: {0} ms", t2 - t1); | |
34 | |
35 q2 = new ConcurrentQueue<int>(); | |
36 | |
37 t1 = Environment.TickCount; | |
38 | |
39 for (var i = 0; i < count; i++) | |
40 lock (q2) | |
41 q2.Enqueue(i); | |
42 | |
43 t2 = Environment.TickCount; | |
44 Console.WriteLine("LinkedList+Lock: {0} ms", t2 - t1); | |
29 | 45 |
30 } | 46 } |
31 } | 47 } |
32 } | 48 } |