示例#1
0
        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();
        }
示例#2
0
        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');
        }
示例#3
0
        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);
        }