c# - 有哪些关键字/工具可以帮助编译器优化

标签 c# .net code-contracts compiler-optimization spec#

我们经常被告知这样的事情,

If you're calling a method with a return value that doesn't change, take it out of the loop.

例如,当编写如下代码时:

for(int i=0; i < Instance.ExpensiveNonChangingMethod(); i++)
{
    // Stuff
}

我想知道您是否可以告诉编译器在给定相同输入(和对象实例)的情况下您将获得相同的输出,这样它就会知道它可以将其移出循环作为优化过程的一部分。

有这样的东西吗?也许像 ?或者他们已经可以做这种事情了吗?

是否可以想象编译器可以推断出一个方法是 pure function它自己?

有什么我可以在 C# 中使用的东西可以使编译器执行更多的优化吗? 是的,我知道过早优化。我问这个问题主要是出于好奇,但如果确实存在类似上述的方法,一旦方法被标记,它将是“免费的”。

最佳答案

Microsoft FxCop 检测到一些效率问题, 这是 Platform SDK 的一部分.

它检测到的 18 个性能相关问题的列表是 here .

但是,它没有检测到您提到的具体示例。

关于c# - 有哪些关键字/工具可以帮助编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6743462/

相关文章:

c# - 从 request.querystring 中删除字符

c# - 使用 Html Agility Pack 获取 html 页面上的所有 div id

c# - 如何阻止自定义性能计数器实例名称自动转换为小写

c# - 在JsonResult中返回文件还是在ActionResult中返回Json数据?

c# - 在 C# 代码合约中使用纯函数时的静态验证限制?

c# - 删除已经绘制的形状

c# - 跨多个折线图的垂直线,并在 Winforms 中显示每个图表的值

c# - 为什么推荐的 dispose 模式会在层次结构的每个级别添加一个已处理字段?

c# - 代码契约(Contract) 1.4.40602.0 - Contract.ForAll 似乎不起作用?

c# - "Contract can' t be in try block”是什么意思?