zoukankan      html  css  js  c++  java
  • 关于Duck Typing的性能分析 Draft

    using System;
    using System.Threading;
    using System.Collections.Generic;
    using System.Diagnostics;

    namespace DuckTyping
    {

    class Program
    {
    public static int Range = 10000000;

    static void Main(string[] args)
    {
    string newRange = Console.ReadLine();
    if (!string.IsNullOrEmpty(newRange))
    {
    Range
    = Int32.Parse(newRange);
    }

    FakeEnumerable fake
    = new FakeEnumerable();
    RealEnumerable real
    = new RealEnumerable();
    YieldEnumerable
    yield = new YieldEnumerable();

    Stopwatch sw
    = new Stopwatch();
    sw.Start();

    foreach (var item in fake)
    {
    }

    sw.Stop();
    Console.WriteLine(
    "Duck Typing : {0}",sw.ElapsedMilliseconds);
    sw.Reset();
    sw.Start();

    foreach (var item in real)
    {
    }

    sw.Stop();
    Console.WriteLine(
    "Interface compl: {0}", sw.ElapsedMilliseconds); sw.Reset();
    sw.Reset();
    sw.Start();

    foreach (var item in yield)
    {
    }

    sw.Stop();
    Console.WriteLine(
    "Yield compl: {0}", sw.ElapsedMilliseconds);


    Console.ReadKey();
    }
    }

    public class FakeEnumerable
    {
    public FakeEnumerator GetEnumerator()
    {
    return new FakeEnumerator();
    }
    }

    public class FakeEnumerator
    {
    public FakeEnumerator()
    {
    this.Current = 1;
    }

    public int Current {get;set;}

    public bool MoveNext()
    {
    Current
    ++;
    return Current < Program.Range;
    }
    }

    public class RealEnumerable : IEnumerable<int>
    {
    public IEnumerator<int> GetEnumerator()
    {
    return new RealEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
    throw new NotImplementedException();
    }
    }

    public class RealEnumerator : IEnumerator<int>
    {
    private int current;

    public RealEnumerator()
    {
    this.current = 0;
    }

    public int Current
    {
    get { return this.current; }
    }

    public void Dispose()
    {
    }

    object System.Collections.IEnumerator.Current
    {
    get { return this.current; }
    }

    public bool MoveNext()
    {
    current
    ++;
    return current < Program.Range;
    }

    public void Reset()
    {
    throw new NotImplementedException();
    }
    }

    public class YieldEnumerable : IEnumerable<int>
    {
    private static int index = 0;

    public IEnumerator<int> GetEnumerator()
    {
    while (index < Program.Range)
    yield return index++;
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
    throw new NotImplementedException();
    }
    }
    }

    作者:Jeffrey Sun
    出处:http://sun.cnblogs.com/
    本文以“现状”提供且没有任何担保,同时也没有授予任何权利。本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    LA3523 二分图和点双连通分量的综合性质及证明
    LA4127计算几何+离散化+点覆盖
    LA 4728凸包算法-旋转卡壳的直径
    UVA 11168凸包+距离公式
    UVA 10652凸包+面的旋转
    UVA10969计算几何+交叉圆形成的圆弧长
    LA3485二分+求解积分方程+辛普森算法计算积分
    LA5009三分法
    UVA10341幂函数零点的通解分析
    UVA11524构造系数数组+高斯消元解异或方程组
  • 原文地址:https://www.cnblogs.com/sun/p/2097753.html
Copyright © 2011-2022 走看看