美文网首页
C#优化之接口的分发

C#优化之接口的分发

作者: 有利息 | 来源:发表于2020-07-14 22:39 被阅读0次

    当你第一次通过接口调用方法时,.NET必须找出由哪个类型和方法来执行调用。首先会调用一段桩代码(Stub),为实现了该接口的对象找到正确的方法。经过数次查找之后,CLR会意识到总是在调用同一个具体类型,Stub代码会由间接调用简化为几条直接调用的汇编命令。这几条指令被称为Monomorphic Stub,因为已经知道如何直接调用某个类型的方法,如果调用方总是对同一个类型调用接口方法,那这就是理想的状态。
    Monomorphic Stub也会检测到调用错误。如果调用方用了其他类型的对象,那么CLR最终会用另一个指向新类型的Monomorphic Stub替换掉Stub代码。
    如果情况比较复杂,需要调用多种类型,可预测性也不高(比如你用接口类型组成了数组或者集合,里面的具体类型比较多),那么Stub代码会变成用哈希表来选择方法的Polymorphic Stub。哈希表的检索速度是很快,但还是没有直接调用Polymorphic Stub快,而且这个哈希表的大小是收到严格的限制的。如果你的类型过多,Stub还可能会回到一开始那种泛型查找的代码,那样开销就很高了。

如果以上策略影响到了程序性能,你可以这样进行优化:
\color{rgb(236,114,89)}{\small{1.避免通过公共接口调用和对象。}}
\color{rgb(236,114,89)}{\small{2.将公共接口改为抽象基类。}}

--出自【编写高性能的.NET代码】


经测试,当对象越多、类型越多、方法越复杂时,采用抽象类方式可以明显提升程序运行速度。

相关文章

  • C#优化之接口的分发

        当你第一次通过接口调用方法时,.NET必须找出由哪个类型和方法来执行调用。首先会调用一段桩代码(Stub)...

  • 2019-01-12

    C#接口开发之WebService接口的编写、发布、访问 开发工具:VS2013 一、接口的开发 首先新建一个We...

  • C#基础之接口

    对于接口一直以来都清楚自己理解的不深入,这两天重温以前的代码时更加发现对接口的理解仅仅限于定义而已,得好好学学接口...

  • C#之interface(接口)

    定义: 接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和接口可以实现接口。 接口是一个引用类型,通过接...

  • 八、Android视频框架PlayerBase#IEventDi

    接口IEventDispatcher IEventDispatcher是一个事件分发接口。 接口OnPlayerE...

  • 字符串优化

    参考文章:Unity 游戏的 string interning 优化C#的字符串优化-String.Intern、...

  • 20191114-工作日志

    1、一键分发插件 终于将插件基本功能实现了,接下来的任务是优化,包括: 登录注册、找回密码的接口对接。 登陆后用户...

  • 作业

    请用接口隔离原则优化cache类的设计,画出优化后的类图 接口隔离:

  • 提供 CTP行情与交易SDK的C#接口

    提供 CTP行情与交易SDK的C#接口 QQ 516333132

  • 接口的作用

    C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,...

网友评论

      本文标题:C#优化之接口的分发

      本文链接:https://www.haomeiwen.com/subject/wduqhktx.html