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

  • 相关阅读:
    学习九-python 异常处理
    验证基于逻辑回归的隐马尔可夫模型的心音信号切分算法(literature study)
    字典的内置方法比较
    学习六
    Ubuntu 16.04 LTS 搜狗输入法安装
    集合经验模态分解(EEMD)在语音中的应用举例
    SwfUpload及imgareaselect使用方法
    Uploadify插件使用方法
    Ueditor使用方法
    PartialView 加载Js
  • 原文地址:https://www.cnblogs.com/sun/p/2097753.html
Copyright © 2011-2022 走看看