首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法内衬注意事项

方法内衬注意事项
EN

Software Engineering用户
提问于 2019-01-16 15:55:30
回答 2查看 760关注 0票数 1

通常,我看到大型方法受益于某种类型的内联,而C#编译器会自动进行这种微优化。我理解,如果一个方法在一个封闭的方法中只被调用一次,那么即使方法本身很大,当内联时性能也会提高。但是,如果在许多地方调用了一个大型方法,那么如果它是内联的,性能就会下降,因为它降低了引用的局部性。我知道所有的方法调用都有成本,例如添加到评估堆栈等,所以,我的问题是,我们如何找到减少内联时的指令计数以及性能影响,以确定一个方法是否可以从手工内联中受益?其思想是有选择地和手动地内联方法调用,以提高性能。任何关于这个问题的想法和想法都将受到欢迎。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2019-01-16 16:33:15

softwareengineering.stackexchange.com上提出这个问题时,代码质量是一个主要问题,我的简短回答是:除非您计划创建自己的编译器/运行时系统,否则不要浪费时间在手工内联方法的性能影响的问题上。

让编译器和运行时系统决定内联和类似的微优化。作为一名软件工程师,您应该以最高优先级的可读代码为目标。优化通常会降低代码的可读性(比如手动内联代码,创建巨大的怪物方法),而且大多数情况下都会对性能产生影响,您不会注意到。

所以:

  • 尽可能编写最易读的代码。
  • 检查您是否有任何性能问题。
  • 如果没有你就没事了。
  • 如果您有性能问题,请使用分析器查找真正的瓶颈(很可能,它不会围绕内联方法进行任何操作)。
  • 优化瓶颈,只有瓶颈。
  • 验证优化确实改进了什么。否则,回滚到原来的,更易读的代码。
  • 必要时,重复这一周期。
票数 5
EN

Software Engineering用户

发布于 2019-01-16 16:07:48

正如您已经描述的,编译器通常会做出最好的猜测。但是,如果希望强制内联,则有AggressiveInlining方法属性(请参见MSDN)。与任何性能调优一样,衡量任何潜在好处的唯一方法是基准测试。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/385637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档