gpt4 book ai didi

c# - bool 运算优化

转载 作者:太空狗 更新时间:2023-10-29 21:57:53 25 4
gpt4 key购买 nike

我有一个工具可以生成几个 bool 值,看起来像这样:

(!(dcn.XdbDate != null)) && (dcn.XdaDate != null)

最长的是1361个字符。我需要将这些复制到 C# 源文件中,以便在 linq 查询中使用。

我的第一个问题是,C# 会自动优化这些运算符吗?上面的例子,编译的时候会自动转换成下面的吗?

dcn.XdbDate == null && dcn.XdaDate != null

如果没有,是否有一些 C# 编译器功能可以让我编写程序,为它提供未优化的程序并获得优化的程序?

编辑:

大部分生成的 bool 运算都是

的形式
xxx1 = condition ? value11 : value12,
xxx2 = condition ? value21 : value22,
etc...

问题是 condition 部分没有优化。

最佳答案

这不是一个简单的答案..但我们还是试试吧。

在更“通用”的方法中,您问的是如何知道正在/将要优化什么,什么不是? - 当然,作为负责任的开发人员,您必须假设没有任何东西会为您优化,编写优化代码完全由您负责。
话虽如此,我们当然知道有些事情确实会自动优化。

优化可能发生在 3 种不同的情况下:

  1. 在构建调试版本期间。

  2. 在发布版本的构建过程中。

  3. 通过对已构建的文件执行 NGEN 实用程序。

优化可以描述为洋葱 - 外壳将始终包含内壳,并会添加一些自己的东西。

所以,

在调试中可以进行什么类型的优化?
只有不会为调试用户改变代码分离的优化。
例如:if(a==!true && a==false)
a==!truea==false 相同 - 所以只有其中之一是个好主意 - 但如果进行这样的优化,开发人员将不会能够像优化之前一样逐步执行表达式 - 因此此类优化不会在调试版本中发生。

但是.. a==!true - 只有这个自治部分可以替换为下面的 a==false 而不会破坏表达式分隔 - 这意味着它会没问题从编译器的角度来看,将:
if(a==!true && a==false) 替换为可能更快的指令集,它实际上表示
if (a==false && a==false) 因为不会命中表达式分隔,调试或单步执行也不会改变。

发布中可以进行哪些类型的优化?
如果我们回到相同的示例 - 在发布中 - 表达式 if(a==!true && a==false) 可以优化为 if(a==false) 因为预定义版本不用于调试,因此编译器在进行此类优化时无需担心。

在 NGEN 中可以进行什么类型的优化?
这是一个完全不同的垂直...
NGEN 可以用于调试或发布——这意味着与以前一样适用相同的规则,这实际上是在您构建代码时由 JIT 完成的。 NGEN 作业是将它找到的代码优化到 native (当前)机器 CPU 架构。我不会在这里介绍 - 您可以从 here 中阅读所有相关信息.

请记住:如果一个表达式的每个部分都无法进入 - 它已经被优化了。

关于c# - bool 运算优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com