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

  • 相关阅读:
    ansible命令应用示例
    ansible运维自动化工具
    grep 命令使用指南
    Nginx httpS server配置
    find 使用指南
    fastcgi_param 详解
    nginx虚拟主机的配置
    shell中字体变色
    nginx.conf 配置文件详解
    php-fpm.conf 配置文件详解
  • 原文地址:https://www.cnblogs.com/sun/p/2097753.html
Copyright © 2011-2022 走看看