您的位置:首页 > 其它

自制DynamicProxy开发成功,性能测试提升了1.4倍。(看来微软的realproxy并不弱!导致我无法提升一个数量级)

2010-06-05 07:52 393 查看
参考了微软的realproxy设计模式,使用相同的IMessage结构,重写了整个proxy。

使用了emit技术,性能得到了极大提升。

模仿旧的pojo代码,得到:

代码 //performance
public void test002()
{
IproxyWithProperty pojo = Pixysoft.Tools.PojoHelper.GetPojo<IproxyWithProperty>();

IproxyWithProperty proxy = new MyProxy<IproxyWithProperty>().Value;

Pixysoft.Tools.CodeTimer.Initialize();

Pixysoft.Tools.CodeTimer.Time("pojo", 100000, delegate()
{
pojo.Name = "123";
object name = pojo.Name;
});

Pixysoft.Tools.CodeTimer.Time("proxy", 100000, delegate()
{
proxy.Name = "123";
object name = proxy.Name;
});
}

测试结果如下:

------ Test started: Assembly: Pixysoft.Framework.Reflection.dll ------

pojo

Time Elapsed: 7,997ms

CPU time: 7,796,875,000ns

Gen 0: 760

Gen 1: 0

Gen 2: 0

proxy

Time Elapsed: 5,651ms

CPU time: 5,484,375,000ns

Gen 0: 398

Gen 1: 0

Gen 2: 0

1 passed, 0 failed, 0 skipped, took 13.77 seconds (Ad hoc).

性能提高了1.415倍。

如果把初始化proxy的代码放入循环,得到结果:

------ Test started: Assembly: Pixysoft.Framework.Reflection.dll ------

pojo

Time Elapsed: 8,569ms

CPU time: 8,015,625,000ns

Gen 0: 800

Gen 1: 0

Gen 2: 0

proxy

Time Elapsed: 6,263ms

CPU time: 5,843,750,000ns

Gen 0: 475

Gen 1: 0

Gen 2: 0

性能提高了1.368倍。

可以看出,微软的Realproxy本质上并不弱。 内部实现应该使用了类似emit的技术了。。。

因此,一天的努力几乎有点白费了。。。竟然没有提高一个数量级。。。

1 passed, 0 failed, 0 skipped, took 14.92 seconds (Ad hoc).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐