private static void ShowDynamicInvocationWithCLR() { object result; var sobj = new MyStaticObject() as object; var t = sobj.GetType(); result = t.InvokeMember("MyMethod", BindingFlags.InvokeMethod, null, sobj, new object[] { }); Console.WriteLine(Convert.ToInt32(result)); Console.WriteLine(); }
private static void ShowDynamicInvocationWithDLR() { dynamic sobj = new MyStaticObject(); dynamic dobj = new MyDynamicObject(); Console.WriteLine(sobj.MyMethod()); Console.WriteLine(); dobj.MyMethod(); dobj.Add(1, 3); dobj.Foo("Michael", 42); dobj.Bar(3.4, "Petra", 'X'); }
private static void ShowParallelFeatures() { MyStaticObject mso1 = new MyStaticObject(), mso2 = new MyStaticObject(), mso3 = new MyStaticObject(); var range = Enumerable.Range(1, 5); var watch = new Stopwatch(); watch.Reset(); watch.Start(); mso1.MyAction(); mso2.MyAction(); mso3.MyAction(); watch.Stop(); Console.WriteLine("Sequential: {0}", watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); Parallel.Invoke(mso1.MyAction, mso2.MyAction, mso3.MyAction); watch.Stop(); Console.WriteLine("Parallel: {0}", watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); for (var i = 0; i < 4; i++) { mso1.MyAction(i); } for (var i = 0; i < 4; i++) { mso2.MyAction(i); } for (var i = 1; i < 3; i++) { mso2.MyAction(i); } watch.Stop(); Console.WriteLine("Sequential: {0}", watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); Parallel.For(0, 4, mso1.MyAction); Parallel.For(0, 4, i => { mso2.MyAction(i); }); Parallel.For(1, 3, delegate(int i) { mso2.MyAction(i); }); // C# 3.0 anonymous method watch.Stop(); Console.WriteLine("Parallel: {0}", watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); foreach (var r in range) { mso1.MyAction(r); } foreach (var r in range) { mso2.MyAction(r); } watch.Stop(); Console.WriteLine("Sequential: {0}", watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); Parallel.ForEach(range, mso1.MyAction); Parallel.ForEach(range, r => { mso2.MyAction(r); }); watch.Stop(); Console.WriteLine("Parallel: {0}", watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); var q = from r in range select mso1.MyFunction(r); var l = q.ToList(); watch.Stop(); Console.WriteLine("Sequential: {0}", watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); var qp = from r in range.AsParallel() select mso1.MyFunction(r); var lp = qp.ToList(); watch.Stop(); Console.WriteLine("Parallel: {0}", watch.ElapsedMilliseconds); }