通常,我看到大型方法受益于某种类型的内联,而C#编译器会自动进行这种微优化。我理解,如果一个方法在一个封闭的方法中只被调用一次,那么即使方法本身很大,当内联时性能也会提高。但是,如果在许多地方调用了一个大型方法,那么如果它是内联的,性能就会下降,因为它降低了引用的局部性。我知道所有的方法调用都有成本,例如添加到评估堆栈等,所以,我的问题是,我们如何找到减少内联时的指令计数以及性能影响,以确定一个方法是否可以从手工内联中受益?其思想是有选择地和手动地内联方法调用,以提高性能。任何关于这个问题的想法和想法都将受到欢迎。
发布于 2019-01-16 16:33:15
在softwareengineering.stackexchange.com上提出这个问题时,代码质量是一个主要问题,我的简短回答是:除非您计划创建自己的编译器/运行时系统,否则不要浪费时间在手工内联方法的性能影响的问题上。
让编译器和运行时系统决定内联和类似的微优化。作为一名软件工程师,您应该以最高优先级的可读代码为目标。优化通常会降低代码的可读性(比如手动内联代码,创建巨大的怪物方法),而且大多数情况下都会对性能产生影响,您不会注意到。
所以:
发布于 2019-01-16 16:07:48
正如您已经描述的,编译器通常会做出最好的猜测。但是,如果希望强制内联,则有AggressiveInlining方法属性(请参见MSDN)。与任何性能调优一样,衡量任何潜在好处的唯一方法是基准测试。
https://softwareengineering.stackexchange.com/questions/385637
复制相似问题