博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Duck Typing的性能分析 - Draft
阅读量:5296 次
发布时间:2019-06-14

本文共 2242 字,大约阅读时间需要 7 分钟。

 
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();
}
}
}

转载于:https://www.cnblogs.com/sun/archive/2011/07/04/2097753.html

你可能感兴趣的文章
bash使用规则
查看>>
AVL数
查看>>
第二章练习
查看>>
ajax2.0
查看>>
C#时间截
查看>>
C语言程序设计II—第九周教学
查看>>
全栈12期的崛起之捡点儿有用的说说
查看>>
基础类型
查看>>
属性动画
查看>>
标识符
查看>>
Sqli labs系列-less-4 这关好坑!!!
查看>>
路由跟踪工具0trace
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
理解运算符重载 4
查看>>
快来熟练使用 Mac 编程
查看>>
第二周
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>