四探C#类与结构体究竟谁快——跨程序集(assembly)调用_第1页
四探C#类与结构体究竟谁快——跨程序集(assembly)调用_第2页
四探C#类与结构体究竟谁快——跨程序集(assembly)调用_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、四探C#类与结构体究竟谁快跨程序集(assembly)调用分类: #All - 所有 数学&优化技巧 2011-10-01 23:23 177人阅读 评论(2) 收藏 举报前面的三次测试都是在同一个项目内的,既处于同一个程序集。那么,跨程序集调用会怎么样呢?因为为了保证可维护性,我们会把一些常用操作封装到类库中去。然后实际项目开发时,引用该类库,使得解决方案中存在多个项目。编译完成后,将会是一个主要的exe和若干个dll文件,主exe程序集中的代码会调用dll程序集,既形成了跨程序集调用。 分析跨程序集调用的性能,有助优化类库架构的设计。一、测试办法其实步骤很简单1.重新打开VS200

2、5。或关闭解决方案。2.新建一个“Windows应用程序”项目。如“TryPointerCallns2005”。3.添加项目,选择上次的“TryPointerCall2005”。现在解决方案中就有两个项目了。4.选择第2步时新建的项目(TryPointerCallns2005),添加引用,将“TryPointerCall2005”加上去。5.调整项目属性,允许不安全的代码。6.新建一个类(TestCall),将测试代码全部Copy过来(注意只复制测试代码,不复制IPointerCall、PointerCall等实现)。7.修改窗口界面,调用TestCall的测试代码。二、测试环境编译器VS20

3、05:Visual Studio 2005 SP1。采用上述编译器编译为Release版程序,最大速度优化。 机器HP CQ42-153TX处理器:Intel Core i5-430M(2.26GHz, Turbo 2.53GHz, 3MB L3) 内存容量:2GB (DDR3-1066)三、测试结果测试结果如下= PointerCallTool.TryIt() =硬编码.栈变量: 162硬编码.栈分配: 168硬编码.静态: 164静态调用: 16064硬编码.栈变量: 16164硬编码.栈分配: 16064硬编码.静态: 16064静态调用: 162调用派生类: 1118调用密封类: 10

4、49调用结构体: 1069调用基类: 1128调用派生类的接口: 1132调用密封类的接口: 1135调用结构体的接口: 1453基类泛型调用派生类: 1769基类泛型调用基类: 1774接口泛型调用派生类: 2230接口泛型调用密封类: 2240接口泛型调用结构体: 1215接口泛型调用结构体引用: 1127接口泛型调用基类: 2241接口泛型调用派生类的接口: 2230接口泛型调用密封类的接口: 2244接口泛型调用结构体的接口: 2302可见,在跨程序集调用时,调用密封类、调用结构体不会被即时编译器(JIT)做内联优化,而被当做普通的虚方法调用。所以,对于那些要求性能的代码,应尽量保证在同一程序集内,避免将其放在类库工程,这样能尽可能地利用即时编译器(JIT)内联优化的机会。(完)源代码下载目录C#类与结构体究竟谁快各种函数调

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论