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/
    本文以“现状”提供且没有任何担保,同时也没有授予任何权利。本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    RecyclerView用法
    POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】
    Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】
    ACM-ICPC 2017 Asia Xi'an J LOL 【暴力 && 排列组合】
    2016 ACM/ICPC亚洲区大连站 F
    2016 ACM/ICPC亚洲区大连站-重现赛 解题报告
    ACM-ICPC 2017 Asia HongKong 解题报告
    Codeforces Round #515 (Div. 3) B. Heaters【 贪心 区间合并细节 】
    POJ 1984 Navigation Nightmare 【经典带权并查集】
    树的直径的求法即相关证明【树形DP || DFS】
  • 原文地址:https://www.cnblogs.com/sun/p/2097753.html
Copyright © 2011-2022 走看看