gpt4 book ai didi

c# - 冗余转换是否得到优化?

转载 作者:IT王子 更新时间:2023-10-29 03:53:20 25 4
gpt4 key购买 nike

我正在更新一些旧代码,并且发现了几个实例,每次需要调用其属性或方法之一时,都会重复转换同一个对象。示例:

if (recDate != null && recDate > ((System.Windows.Forms.DateTimePicker)ctrl).MinDate)
{
((System.Windows.Forms.DateTimePicker)ctrl).CustomFormat = "MM/dd/yyyy";
((System.Windows.Forms.DateTimePicker)ctrl).Value = recDate;
}
else
{
(System.Windows.Forms.DateTimePicker)ctrl).CustomFormat = " ";
}
((System.Windows.Forms.DateTimePicker)ctrl).Format = DateTimePickerFormat.Custom;

我倾向于解决这个问题,但考虑到我的时间有限,我不想为任何不影响功能或性能的事情操心。

所以我想知道的是,这些多余的转换是否被编译器优化掉了?我尝试通过在一个简化的示例中使用 ildasm 自己解决这个问题,但由于不熟悉 IL,我最终只会更加困惑。

更新

到目前为止,共识似乎是 a) 不,转换没有优化,但是 b) 虽然可能会有一些小的性能影响,但不太可能,并且 c) 我应该考虑无论如何修复它们。如果我有时间的话,我已经决定有一天解决这些问题。同时,我不会担心他们。

谢谢大家!

最佳答案

对发布版本中生成的机器代码的抽查表明 x86 抖动没有优化丢弃。

不过,您必须从大局着眼。您正在分配控件的属性。它们有很多副作用。对于 DateTimePicker,分配会导致将消息发送到 native Windows 控件。反过来,它会在消息中嘎吱作响。 Actor 的成本与副作用的成本相比可以忽略不计。重写作业永远不会在速度上产生明显的差异,你只让它快了一个百分点。

继续在一个慵懒的星期五下午重写代码。但只是因为它会损害可读性。可读性差的 C# 代码也会生成优化不佳的机器代码,这并非完全是巧合。

关于c# - 冗余转换是否得到优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5278674/

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