gpt4 book ai didi

c# - 确保语句未优化 "away"

转载 作者:太空狗 更新时间:2023-10-29 23:07:11 24 4
gpt4 key购买 nike

我正在使用一个 API,不幸的是,调用 get 属性访问器会产生副作用。我如何确保:

public void Foo()
{
var x = obj.TheProp; // is it guarnateed to be accessed?
}

编译器没有优化掉吗?

最佳答案

那不会被优化掉 - getter 是一个方法并且会被调用,尽管 JIT 可能会选择“内联”很多它,如果它很简单的话,也许最终(并且完全理论上)结束只是一个空引用检查 TheProp 是否没有做任何特别令人兴奋的事情。 可能 发生的是“返回的东西”(代码存储到 x 中)在方法结束之前有资格进行垃圾回收;这很少是一个问题,除了像进程外互斥体这样的东西;在这种情况下,您可以执行以下操作:

var x = obj.TheProp;
// long-running code here
GC.KeepAlive(x);

但是请注意,如果 x 是值类型的,这将强制它被装箱,这并不理想。

但要强调:以上内容不是旨在确保实际调用 TheProp;它适用于一组特定的垃圾相关场景。

关于c# - 确保语句未优化 "away",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26342377/

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